Запись списка в файл с помощью Python

Является ли это самым чистым способом записи списка в файл, так как writelines() не вставляет символы новой строки?

file.writelines(["%s\n" % item  for item in list])

Похоже, что будет стандартный способ...

Ответ 1

Вы можете использовать цикл:

with open('your_file.txt', 'w') as f:
    for item in my_list:
        f.write("%s\n" % item)

В Python 2 вы также можете использовать

with open('your_file.txt', 'w') as f:
    for item in my_list:
        print >> f, item

Если вы заинтересованы в одном вызове функции, по крайней мере снимите квадратные скобки [], чтобы строки для печати создавались по одной (genexp, а не listcomp) - нет причин занимать все память, необходимая для материализации всего списка строк.

Ответ 2

Что вы собираетесь делать с файлом? Существует ли этот файл для людей или других программ с четкими требованиями к взаимодействию?

Если вы просто пытаетесь сериализовать список на диск для последующего использования тем же приложением Python, вы должны выбрать список.

import pickle

with open('outfile', 'wb') as fp:
    pickle.dump(itemlist, fp)

Чтобы прочитать это обратно:

with open ('outfile', 'rb') as fp:
    itemlist = pickle.load(fp)

Ответ 3

Более простой способ:

outfile.write("\n".join(itemlist))

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

outfile.write("\n".join(str(item) for item in itemlist))

Помните, что весь список itemlist должен находиться в памяти, поэтому позаботьтесь об использовании памяти.

Ответ 4

Еще один способ. Сериализовать в json, используя simplejson (включен как json в python 2.6):

>>> import simplejson
>>> f = open('output.txt', 'w')
>>> simplejson.dump([1,2,3,4], f)
>>> f.close()

Если вы просмотрите файл output.txt:

[1, 2, 3, 4]

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

Ответ 5

Использование синтаксиса Python 3 и Python 2.6 +:

with open(filepath, 'w') as file_handler:
    for item in the_list:
        file_handler.write("{}\n".format(item))

Это не зависит от платформы. Он также завершает окончательную строку символом новой строки, который является лучшей практикой UNIX.

Ответ 6

Я подумал, что было бы интересно изучить преимущества использования genexp, так что вот мой прием.

В примере в вопросе используются квадратные скобки для создания временного списка, и это эквивалентно:

file.writelines( list( "%s\n" % item for item in list ) )

Что бесполезно создает временный список всех строк, которые будут выписаны, это может потреблять значительные объемы памяти в зависимости от размера вашего списка и того, насколько сложным является вывод str(item).

Отбросить квадратные скобки (эквивалент удаления вызова list() выше) вместо этого будет передавать временный

Этот генератор создаст новое представление ваших объектов item по завершении строки (т.е. как они выписаны). Это приятно по нескольким причинам:

Накладные расходы памяти небольшие, даже для очень больших списков Если str(item) медленный, в процессе обработки каждого файла обрабатывается видимый прогресс.

Это позволяет избежать проблем с памятью, например:

In [1]: import os

In [2]: f = file(os.devnull, "w")

In [3]: %timeit f.writelines( "%s\n" % item for item in xrange(2**20) )
1 loops, best of 3: 385 ms per loop

In [4]: %timeit f.writelines( ["%s\n" % item for item in xrange(2**20)] )
ERROR: Internal Python error in the inspect module.
Below is the traceback from this internal error.

Traceback (most recent call last):
...
MemoryError

(Я вызвал эту ошибку, ограничив виртуальную память Python max до ~ 100 МБ с помощью ulimit -v 102400).

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

In [4]: %timeit f.writelines( "%s\n" % item for item in xrange(2**20) )
1 loops, best of 3: 370 ms per loop

In [5]: %timeit f.writelines( ["%s\n" % item for item in xrange(2**20)] )
1 loops, best of 3: 360 ms per loop

(Python 2.6.2 в Linux)

Ответ 7

Потому что я ленивый....

import json
a = [1,2,3]
with open('test.txt', 'w') as f:
    f.write(json.dumps(a))

#Now read the file back into a Python list object
with open('test.txt', 'r') as f:
    a = json.loads(f.read())

Ответ 8

Сериализовать список в текстовый файл с запятой sepparated value

mylist = dir()
with open('filename.txt','w') as f:
    f.write( ','.join( mylist ) )

Ответ 9

В целом

Ниже приведен синтаксис метода writelines()

fileObject.writelines( sequence )

Пример

#!/usr/bin/python

# Open a file
fo = open("foo.txt", "rw+")
seq = ["This is 6th line\n", "This is 7th line"]

# Write sequence of lines at the end of the file.
line = fo.writelines( seq )

# Close opend file
fo.close()

Ссылка

http://www.tutorialspoint.com/python/file_writelines.htm

Ответ 10

file.write('\n'.join(list))

Ответ 11

with open ("test.txt","w")as fp:
   for line in list12:
       fp.write(line+"\n")

Ответ 12

Вы также можете использовать функцию печати, если вы находитесь на python3 следующим образом.

f = open("myfile.txt","wb")
print(mylist, file=f)

Ответ 13

Почему бы вам не попробовать

file.write(str(list))

Ответ 14

Эта логика сначала преобразует элементы в списке в string(str). Иногда список содержит как кортеж

alist = [(i12,tiger), 
(113,lion)]

Эта логика будет записывать в файл каждый кортеж в новой строке. Позже мы можем использовать eval при загрузке каждого кортежа при чтении файла:

outfile = open('outfile.txt', 'w') # open a file in write mode
for item in list_to_persistence:    # iterate over the list items
   outfile.write(str(item) + '\n') # write to the file
outfile.close()   # close the file 

Ответ 15

Еще один способ итерации и добавления новой строки:

for item in items:
    filewriter.write(f"{item}" + "\n")

Ответ 16

Попробуй это:

a=[1,2,3]
with open("list1.txt", "w") as file:
    for i in a:
        file.write(str(i))
        file.write('\n')

Вывод в текстовый файл:

1
2
3

Ответ 17

poem = '''\
Programming is fun
When the work is done
if you wanna make your work also fun:
use Python!
'''
f = open('poem.txt', 'w') # open for 'w'riting
f.write(poem) # write text to file
f.close() # close the file

Как это работает: Сначала откройте файл, используя встроенную функцию открытия и указав имя файл и режим, в котором мы хотим открыть файл. Режим может быть режим чтения (r), режим записи (w) или режим добавления (a). Мы также можем указать мы читаем, записываем или добавляем в текстовом режиме (t) или двоичном режиме (b). На самом деле существует много доступных режимов и помощь (открыта) даст вам более подробную информацию о них. По умолчанию open() считает файл быть текстовым файлом и открыть его в режиме чтения. В нашем примере мы сначала открываем файл в текстовом режиме и используем запись метод файлового объекта записать в файл, а затем окончательно закрыть файл.

Приведенный выше пример из книги "Байт Python" от Swaroop C H. swaroopch.com

Ответ 18

Пусть avg - список, затем:

In [29]: a = n.array((avg))
In [31]: a.tofile('avgpoints.dat',sep='\n',dtype = '%f')

Вы можете использовать %e или %s в зависимости от ваших требований.