write() at beginning of file?

后端 未结 4 1287
广开言路
广开言路 2020-12-09 09:43

I\'m doing it like this now, but I want it to write at the beginning of the file instead.

f = open(\'out.txt\', \'a\') # or \'w\'?
f.write(\"string 1\")
f.wr         


        
4条回答
  •  抹茶落季
    2020-12-09 10:17

    A variation on kdtrv's answer. This version keeps the existing file contents, and offers a write_lines method that preserves line order.

    class Prepender(object):
        def __init__(self,
                     file_path,
                    ):
            # Read in the existing file, so we can write it back later
            with open(file_path, mode='r') as f:
                self.__write_queue = f.readlines()
    
            self.__open_file = open(file_path, mode='w')
    
        def write_line(self, line):
            self.__write_queue.insert(0,
                                      "%s\n" % line,
                                     )
    
        def write_lines(self, lines):
            lines.reverse()
            for line in lines:
                self.write_line(line)
    
        def close(self):
            self.__exit__(None, None, None)
    
        def __enter__(self):
            return self
    
        def __exit__(self, type, value, traceback):
            if self.__write_queue:
                self.__open_file.writelines(self.__write_queue)
            self.__open_file.close()
    
    
    with Prepender('test_d.out') as f:
        # Must write individual lines in reverse order
        f.write_line('This will be line 3')
        f.write_line('This will be line 2')
        f.write_line('This will be line 1')
    
    with Prepender('test_d.out') as f:
        # Or, use write_lines instead - that maintains order.
        f.write_lines(
            ['This will be line 1',
             'This will be line 2',
             'This will be line 3',
            ]
        )
    

提交回复
热议问题