Является ли это самым чистым способом записи списка в файл, так как writelines()
не вставляет символы новой строки?
file.writelines(["%s\n" % item for item in list])
Похоже, что будет стандартный способ...
Является ли это самым чистым способом записи списка в файл, так как writelines()
не вставляет символы новой строки?
file.writelines(["%s\n" % item for item in list])
Похоже, что будет стандартный способ...
Вы можете использовать цикл:
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) - нет причин занимать все память, необходимая для материализации всего списка строк.
Что вы собираетесь делать с файлом? Существует ли этот файл для людей или других программ с четкими требованиями к взаимодействию?
Если вы просто пытаетесь сериализовать список на диск для последующего использования тем же приложением Python, вы должны выбрать список.
import pickle
with open('outfile', 'wb') as fp:
pickle.dump(itemlist, fp)
Чтобы прочитать это обратно:
with open ('outfile', 'rb') as fp:
itemlist = pickle.load(fp)
Более простой способ:
outfile.write("\n".join(itemlist))
Вы можете убедиться, что все элементы в списке элементов являются строками, используя выражение генератора:
outfile.write("\n".join(str(item) for item in itemlist))
Помните, что весь список itemlist
должен находиться в памяти, поэтому позаботьтесь об использовании памяти.
Еще один способ. Сериализовать в 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, он читается человеком и может быть прочитан другими программами на других языках.
Использование синтаксиса Python 3 и Python 2.6 +:
with open(filepath, 'w') as file_handler:
for item in the_list:
file_handler.write("{}\n".format(item))
Это не зависит от платформы. Он также завершает окончательную строку символом новой строки, который является лучшей практикой UNIX.
Я подумал, что было бы интересно изучить преимущества использования genexp, так что вот мой прием.
В примере в вопросе используются квадратные скобки для создания временного списка, и это эквивалентно:
file.writelines( list( "%s\n" % item for item in list ) )
Что бесполезно создает временный список всех строк, которые будут выписаны, это может потреблять значительные объемы памяти в зависимости от размера вашего списка и того, насколько сложным является вывод str(item)
.
Отбросить квадратные скобки (эквивалент удаления вызова list()
выше) вместо этого будет передавать временный
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
Включение использования памяти в одну сторону, этот метод на самом деле не быстрее оригинала:
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
Потому что я ленивый....
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())
Сериализовать список в текстовый файл с запятой sepparated value
mylist = dir()
with open('filename.txt','w') as f:
f.write( ','.join( mylist ) )
Ниже приведен синтаксис метода 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()
file.write('\n'.join(list))
with open ("test.txt","w")as fp:
for line in list12:
fp.write(line+"\n")
Вы также можете использовать функцию печати, если вы находитесь на python3 следующим образом.
f = open("myfile.txt","wb")
print(mylist, file=f)
Почему бы вам не попробовать
file.write(str(list))
Эта логика сначала преобразует элементы в списке в 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
Еще один способ итерации и добавления новой строки:
for item in items:
filewriter.write(f"{item}" + "\n")
Попробуй это:
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
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
Пусть avg - список, затем:
In [29]: a = n.array((avg))
In [31]: a.tofile('avgpoints.dat',sep='\n',dtype = '%f')
Вы можете использовать %e
или %s
в зависимости от ваших требований.