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
単一の関数呼び出しに興味がある場合は、少なくとも括弧[]
を削除して、印刷される文字列が1つずつ作成されるようにします(listcompではなくgenexp) - すべてのメモリを占有する理由はありません。文字列のリスト全体を具体化するために必要です。
ファイルをどうするつもりですか?このファイルは人間のために存在しますか、または明白な相互運用性要件を持つ他のプログラムのために存在しますか?
同じPythonアプリケーションで後で使用するためにリストをディスクにシリアル化しようとしているだけの場合は、 pickleing リストにする必要があります。
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))
また別の方法です。 simplejson を使用してjsonにシリアライズします(python 2.6では json として含まれています):
>>> 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()
呼び出しを削除するのと同じ)、代わりに一時的な generator がfile.writelines()
に渡されます。
file.writelines( "%s\n" % item for item in 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
(私はulimit -v 102400
を使ってPythonの最大仮想メモリを最大100MBに制限することでこのエラーを引き起こしました).
メモリ使用量を片側に置くと、この方法は実際には元の速度より速くはありません。
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
(Linux上のPython 2.6.2)
リストをカンマ区切り値でテキストファイルにシリアル化
mylist = dir()
with open('filename.txt','w') as f:
f.write( ','.join( mylist ) )
私は怠け者だから....
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())
以下は writelines() methodの構文です。
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を使っているなら、print関数を使うこともできます。
f = open("myfile.txt","wb")
print(mylist, file=f)
試してみませんか
file.write(str(list))
このロジックはまずlist内の項目をstring(str)
に変換します。時々リストはのようなタプルを含んでいます
alist = [(i12,tiger),
(113,lion)]
このロジックは各タプルを新しい行にファイルするように書き込みます。ファイルを読み込むときに各Tupleをロードするときに、後で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")