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
単一の関数呼び出しに熱心な場合は、少なくとも角かっこを削除し[]
て、出力される文字列が1つずつ作成されるようにします(listcompではなくgenexp)-必要なすべてのメモリを消費する理由はありません文字列のリスト全体を具体化します。
thefile.write('\n'.join(thelist))
thefile.write(str(item) + "\n")
ファイルをどのように処理しますか?このファイルは人間、または明確な相互運用性要件を持つ他のプログラムのために存在しますか?
同じPythonアプリで後で使用するためにリストをディスクにシリアル化する場合は、リストをピクルする必要があります。
import pickle
with open('outfile', 'wb') as fp:
pickle.dump(itemlist, fp)
それを読み返すには:
with open ('outfile', 'rb') as fp:
itemlist = pickle.load(fp)
open( "save.p", "wb" )
INFILEのようなものです:open( "save.p", "rb" )
with:
ブロックは、ブロック外の次のステートメントに進む前にファイルを閉じますwith
。
より簡単な方法は次のとおりです。
with open("outfile", "w") as outfile:
outfile.write("\n".join(itemlist))
ジェネレータ式を使用して、アイテムリストのすべてのアイテムが文字列であることを確認できます。
with open("outfile", "w") as outfile:
outfile.write("\n".join(str(item) for item in itemlist))
すべてのitemlist
リストはメモリ内にある必要があることを忘れないでください。したがって、メモリ消費に注意してください。
使用してPythonの3とのPython 2.6+構文を:
with open(filepath, 'w') as file_handler:
for item in the_list:
file_handler.write("{}\n".format(item))
これはプラットフォームに依存しません。また、UNIXのベストプラクティスである、改行文字で最終行を終了します。
Python 3.6以降で"{}\n".format(item)
は、f-string:に置き換えることができますf"{item}\n"
。
file_handler.write("\n".join(str(item) for item in the_list))
genexpを使用するメリットを探求することは興味深いと思いましたので、ここに私の見解を示します。
質問の例では、角括弧を使用して一時リストを作成しているため、次と同等です。
file.writelines( list( "%s\n" % item for item in list ) )
これにより、書き出されるすべての行の一時的なリストが不必要に作成されます。これは、リストのサイズと出力の冗長度によっては、大量のメモリを消費する可能性があります str(item)
。
角かっこを削除するlist()
と(上記のラッピング呼び出しを削除するのと同じ)、代わりに一時的なジェネレータがに渡され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
(私はPythonの最大仮想メモリを〜100MBに制限することでこのエラーを引き起こしました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
(LinuxのPython 2.6.2)
怠惰だから…。
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())
with open ('Sp1.txt', 'a') as outfile:
json.dump (sp1_segments, outfile)
logger.info ("Saved sp_1 segments")
。問題は、プログラムが3回実行され、3つの実行の結果がマッシュアップされていることです。各実行の結果を識別できるように、1〜2個の空の行を追加する方法はありますか?
json.dump(sp1_segments + "\n\n", outfile)
か?
次に、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))
file
変数を取得しますか?
次のようにpython3を使用している場合は、print関数も使用できます。
f = open("myfile.txt","wb")
print(mylist, file=f)
このロジックは、最初にリスト内のアイテムをに変換します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
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関数を使用して、ファイルの名前とファイルを開くモードを指定してファイルを開きます。モードは、読み取りモード( 'r')、書き込みモード( 'w')、または追加モード( 'a')のいずれかです。また、テキストモード( 't')またはバイナリモード( 'b')のどちらで読み取り、書き込み、または追加するかを指定することもできます。実際にはより多くのモードが利用可能であり、help(open)はそれらについてより多くの詳細を提供します。デフォルトでは、open()はファイルを「t」extファイルと見なし、「r」eadモードで開きます。この例では、まずファイルをテキスト書き込みモードで開き、ファイルオブジェクトのwriteメソッドを使用してファイルに書き込み、次にファイルを閉じます。
上記の例は、Swaroop C Hによる本「A Byte of Python」からのものです 。swaroopch.com
writelines
ミラーリングしているため改行が追加されreadlines
ず、削除もされないことに注意してください。