Запись списка в файл с помощью 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) - нет причин занимать всю память, необходимую для материализации всего списка строк.

Комментарии (6)

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

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

import pickle

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

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

with open ('outfile', 'rb') as fp:
    itemlist = pickle.load(fp)
Комментарии (7)

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

``lang-python outfile.write("\n".join(itemlist))


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

``lang-python
outfile.write("\n".join(str(item) for item in itemlist))

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

Комментарии (10)

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

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

Это платформо-независимым. Он также завершает последняя строка с символом перевода строки, который представляет собой лучшие практики в Unix.

Комментарии (2)

Еще один способ. Сериализовать в JSON используя пакет (входит в формате 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]

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

Комментарии (2)

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

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

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

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

Падение в квадратных скобках (в эквиваленте для удаления список упаковки () вызов выше), а не пройдет временное генератор файл.writelines():

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

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

  • Накладные расходы памяти очень маленькие, даже для очень больших списков
  • Если STR `(товар) происходит медленно, там's видимое прогресс в файле как каждый элемент обрабатывается

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

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's Макс. виртуальная память до ~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

(Питон 2.6.2 на Linux)

Комментарии (1)

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

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())
Комментарии (5)

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

mylist = dir()
with open('filename.txt','w') as f:
    f.write( ','.join( mylist ) )
Комментарии (0)

В Целом

Ниже приведен синтаксис для 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

Комментарии (0)
file.write('\n'.join(list))
Комментарии (2)
with open ("test.txt","w")as fp:
   for line in list12:
       fp.write(line+"\n")
Комментарии (0)

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

f = open("myfile.txt","wb")
print(mylist, file=f)
Комментарии (1)

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

file.write(str(list))
Комментарии (0)

Эта логика будет сначала преобразовать элементы в список в строку(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 
Комментарии (0)

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

for item in items:
    filewriter.write(f"{item}" + "\n")
Комментарии (0)
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

Как Это Работает: Во-первых, открыть файл с помощью встроенной функции Open и указать имя файла и режим, в котором мы хотим открыть файл. Режим может быть режим чтения (’Р’), режим записи (’ж’) или режим append (’а’). Мы можем также указать будем ли мы читать, писать, или добавляя в текстовом режиме (’Т’) или Binary режим ("б"). На самом деле существует множество более доступных режимов и помочь(открыть) даст вам более подробную информацию о них. По умолчанию открытые() считает файл, быть файл'ext T и открывает его в режиме Р'ead. В нашем примере, мы сначала открываем файл в написать в текстовом режиме и использовать запись метод объектный файл для записи в файл, а затем мы, наконец, закройте файл.

Приведенный выше пример с книгой "Байт питона" и по Сваруп З. Х. swaroopch.com

Комментарии (1)

Пусть среднее будет в списке, то:

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

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

Комментарии (0)