848

writelines()改行文字を挿入しないので、これはファイルにリストを書き込む最もクリーンな方法ですか?

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

標準的な方法があるようです...

4

26 に答える 26

1152

ループを使用できます。

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)-必要なすべてのメモリを消費する理由はありません文字列のリスト全体を具体化します。

于 2009-05-22T18:04:21.523 に答える
466

ファイルをどうしますか?このファイルは、人間、または明確な相互運用性要件を持つ他のプログラム用に存在しますか?

後で同じPythonアプリで使用するためにリストをディスクにシリアル化しようとしている場合は、リストをピクルスにする必要があります。

import pickle

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

読み返すには:

with open ('outfile', 'rb') as fp:
    itemlist = pickle.load(fp)
于 2009-05-22T18:10:04.960 に答える
384

より簡単な方法は次のとおりです。

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。したがって、メモリ消費に注意してください。

于 2009-05-22T17:58:40.923 に答える
102

Python3およびPython2.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文字列に置き換えることができますf"{item}\n"

于 2011-07-22T14:30:50.883 に答える
94

さらに別の方法。simplejson ( python 2.6にjsonとして含まれています)を使用してjsonにシリアル化します。

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

output.txtを調べると、次のようになります。

[1、2、3、4]

構文はpythonicであり、人間が読める形式であり、他の言語のプログラムで読み取ることができるため、これは便利です。

于 2009-05-22T18:20:19.343 に答える
40

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)

于 2011-02-17T18:13:19.440 に答える
26

怠け者だから……

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())
于 2017-08-10T20:55:23.650 に答える
20

リストをカンマ区切りの値を持つテキストファイルにシリアル化します

mylist = dir()
with open('filename.txt','w') as f:
    f.write( ','.join( mylist ) )
于 2015-11-18T08:51:01.530 に答える
16

一般に

以下は、 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

于 2013-05-09T01:01:40.190 に答える
13
file.write('\n'.join(list))
于 2009-05-22T18:29:47.143 に答える
12

printpython> 3では、*引数の解凍に次を使用できます。

with open("fout.txt", "w") as fout:
    print(*my_list, sep="\n", file=fout)
于 2020-05-05T15:03:43.330 に答える
8
with open ("test.txt","w")as fp:
   for line in list12:
       fp.write(line+"\n")
于 2015-09-10T18:14:57.450 に答える
8

次のようにpython3を使用している場合は、print関数を使用することもできます。

f = open("myfile.txt","wb")
print(mylist, file=f)
于 2015-09-30T21:50:24.963 に答える
7

使用numpy.savetxtもオプションです。

import numpy as np

np.savetxt('list.txt', list, delimiter="\n", fmt="%s")
于 2020-08-13T13:11:35.683 に答える
5

単に:

with open("text.txt", 'w') as file:
    file.write('\n'.join(yourList))
于 2022-01-04T15:56:16.077 に答える
4

やってみませんか

file.write(str(list))
于 2015-08-19T23:47:34.093 に答える
2

このロジックは、最初にリスト内のアイテムをに変換します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 
于 2018-07-11T07:09:33.377 に答える
2

次のことも実行できます。

例:

my_list=[1,2,3,4,5,"abc","def"]
with open('your_file.txt', 'w') as file:
    for item in my_list:
        file.write("%s\n" % item)

出力:

アイテムは次のようにyour_file.txt保存されます:

1

2

3

4

5

abc

def

スクリプトも上記のように保存されます。

それ以外の場合は、ピクルスを使用できます

import pickle
my_list=[1,2,3,4,5,"abc","def"]
#to write
with open('your_file.txt', 'wb') as file:
    pickle.dump(my_list, file)
#to read
with open ('your_file.txt', 'rb') as file:
    Outlist = pickle.load(file)
print(Outlist)

出力:[1、2、3、4、5、'abc'、'def']

読み取り可能なリストをロードすると、リストと同じようにリストが保存されます。

simplejson上記の出力と同じ可能性もあります

import simplejson as sj
my_list=[1,2,3,4,5,"abc","def"]
#To write
with open('your_file.txt', 'w') as file:
    sj.dump(my_list, file)

#To save
with open('your_file.txt', 'r') as file:
    mlist=sj.load(file)
print(mlist)
于 2021-01-02T17:41:58.573 に答える
1

改行を繰り返して追加する別の方法:

for item in items:
    filewriter.write(f"{item}" + "\n")
于 2018-06-14T20:54:20.047 に答える
1

最近、Pathが便利だとわかりました。with open('file') as fファイルへの書き込みを回避するのに役立ちます。これが誰かに役立つことを願っています:)。

from pathlib import Path
import json
a = [[1,2,3],[4,5,6]]
# write
Path("file.json").write_text(json.dumps(a))
# read
json.loads(Path("file.json").read_text())
于 2021-09-15T18:37:36.047 に答える
0

stdoutをファイルにリダイレクトすることも、この目的に役立つ場合があります。

from contextlib import redirect_stdout
with open('test.txt', 'w') as f:
  with redirect_stdout(f):
     for i in range(mylst.size):
        print(mylst[i])
于 2020-09-09T07:53:03.023 に答える
0

私はこの解決策を提案します。

with open('your_file.txt', 'w') as f:        
    list(map(lambda item : f.write("%s\n" % item),my_list))   
于 2021-07-05T22:03:22.680 に答える
0

私はあなたがこのような答えを探していると思います。

f = open('output.txt','w')
list = [3, 15.2123, 118.3432, 98.2276, 118.0043]
f.write('a= {:>3d}, b= {:>8.4f}, c= {:>8.4f}, d= {:>8.4f}, e= 
{:>8.4f}\n'.format(*list))
f.close()
于 2021-09-29T00:42:12.927 に答える
-1

Python3ではこのループを使用できます

with open('your_file.txt', 'w') as f:
    for item in list:
        f.print("", item)
于 2020-01-28T09:46:45.100 に答える
-2

avgをリストとし、次のようにします。

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

要件に応じて、%eまたは使用できます。%s

于 2011-04-26T07:16:32.917 に答える
-4
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メソッドを使用してファイルに書き込み、最後にファイルを閉じます。

上記の例は、SwaroopCH.swaroopch.comの著書「AByteofPython」からのものです

于 2013-07-14T10:37:44.367 に答える