записать () в начале файла?

Я делаю его как это теперь, но я хочу, чтобы это записало в начале файла вместо этого.

f = open('out.txt', 'a') # or 'w'?
f.write("string 1")
f.write("string 2")
f.write("string 3")
f.close()

так, чтобы содержание out.txt будет:

string 3
string 2
string 1

и не (как этот код делает):

string 1
string 2
string 3
19
задан martineau 28 July 2017 в 19:10
поделиться

3 ответа

Взгляните на этот вопрос . Там есть какие-то решения.

Хотя я, вероятно, пошел бы по тому же пути, что предлагают Дэниел и МАК - возможно, сделайте класс lil, чтобы сделать вещи немного более гибкими и понятными:

class Prepender:

    def __init__(self, fname, mode='w'):
        self.__write_queue = []
        self.__f = open(fname, mode)

    def write(self, s):
        self.__write_queue.insert(0, s)

    def close(self):
        self.__exit__(None, None, None)

    def __enter__(self):
        return self

    def __exit__(self, type, value, traceback):
        if self.__write_queue: 
            self.__f.writelines(self.__write_queue)
        self.__f.close()

with Prepender('test_d.out') as f:
    f.write('string 1\n')
    f.write('string 2\n')
    f.write('string 3\n')
13
ответ дан 30 November 2019 в 04:36
поделиться

Вы можете бросать f.seek (0) между каждой записью (или написать функцию-оболочку, которая сделает это за вас), но нет простой сборки для этого.

РЕДАКТИРОВАТЬ : это не сработает, даже если вы поместите туда f.flush () , он будет постоянно перезаписываться. Возможно, вам просто придется поставить в очередь записи и самостоятельно изменить порядок.

Так что вместо

f.write("string 1")
f.write("string 2")
f.write("string 3")

можно сделать что-нибудь вроде:

writeList = []
writeList.append("string 1\n")
writeList.append("string 2\n")
writeList.append("string 3\n")
writeList.reverse()
f.writelines(writeList)
7
ответ дан 30 November 2019 в 04:36
поделиться

Доработка ответа Даниэля ДиПаоло:

Просто добавьте все строки, которые вы хотите записать, в список . Переверните список и запишите его содержимое в файл.

f=open('output.txt','w')

l=[]
l.append("string 1")
l.append("string 2")
l.append("string 3")

for line in l:
    f.write(line)

f.close()

Вы также можете использовать двухстороннюю очередь и добавлять строки в ее начале вместо использования списка и его перестановки.

1
ответ дан 30 November 2019 в 04:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: