web-dev-qa-db-ja.com

ファイルからリストを読み書きする

これは少し奇妙なリクエストですが、リストをファイルに書き込んでからもう一度読み直す方法を探しています。

次の例に示すように、リストを正しく作成/フォーマットするためにリストを再作成する方法はありません。

リストには次のようなデータがあります。

test
data
here
this
is one
group :)

test
data
here
this
is another
group :)
36
Ryflex

人間が判読/編集できる必要がない場合、最も簡単な解決策はpickleを使用することです。

書くには:

with open(the_filename, 'wb') as f:
    pickle.dump(my_list, f)

読むには:

with open(the_filename, 'rb') as f:
    my_list = pickle.load(f)

あなたがdoそれらを人間が読めるようにする必要がある場合、より多くの情報が必要です。

my_listが、改行が埋め込まれていない文字列のリストであることが保証されている場合、1行に1つずつ記述します。

with open(the_filename, 'w') as f:
    for s in my_list:
        f.write(s + '\n')

with open(the_filename, 'r') as f:
    my_list = [line.rstrip('\n') for line in f]

バイト文字列ではなくUnicode文字列の場合は、encodeにする必要があります。 (または、さらに悪いことに、それらがバイト文字列である場合、システムのデフォルトと同じエンコーディングである必要はありません。)

改行や印刷できない文字などが含まれている可能性がある場合は、エスケープまたは引用符を使用できます。 Pythonには、stdlibに組み込まれたさまざまな種類のエスケープがあります。

ここでunicode-escapeを使用して、上記の両方の問題を一度に解決しましょう。

with open(the_filename, 'w') as f:
    for s in my_list:
        f.write((s + u'\n').encode('unicode-escape'))

with open(the_filename, 'r') as f:
    my_list = [line.decode('unicode-escape').rstrip(u'\n') for line in f]

2.xでは、3.xスタイルのソリューションを使用することもできます。 codecs モジュールまたは io モジュールのいずれか:*

import io

with io.open(the_filename, 'w', encoding='unicode-escape') as f:
    f.writelines(line + u'\n' for line in my_list)

with open(the_filename, 'r') as f:
    my_list = [line.rstrip(u'\n') for line in f]

* TOOWTDI、それで1つの明白な方法はどれですか?それは…短いバージョンの場合:2.6より前のPythonバージョンで作業する必要がある場合は、codecsを使用します。そうでない場合は、ioを使用します。

100
abarnert

ファイルに一貫したフォーマット(つまり、改行)がある限り、これは基本的なファイルIOと文字列操作だけで簡単です:

with open('my_file.txt', 'rU') as in_file:
    data = in_file.read().split('\n')

これにより、データファイルがアイテムのリストとして1行に1つずつ保存されます。それをファイルに入れるには、反対のことをします:

with open('new_file.txt', 'w') as out_file:
    out_file.write('\n'.join(data)) # This will create a string with all of the items in data separated by new-line characters

あなたが探しているものに合うことを願っています。

13
Derek Peterson

最初にリストを定義しましょう:

lst=[1,2,3]

リストをファイルに直接書き込むことができます。

f=open("filename.txt","w")
f.write(str(lst))
f.close()

テキストファイルからリストを読み取るには、まずファイルを読み取って変数に保存します。

f=open("filename.txt","r")
lst=f.read()
f.close()

変数lstの型は、もちろん文字列です。 eval関数を使用して、この文字列を配列に変換できます。

lst=eval(lst)
1
Ali Şentürk