これは少し奇妙なリクエストですが、リストをファイルに書き込んでからもう一度読み直す方法を探しています。
次の例に示すように、リストを正しく作成/フォーマットするためにリストを再作成する方法はありません。
リストには次のようなデータがあります。
test
data
here
this
is one
group :)
test
data
here
this
is another
group :)
人間が判読/編集できる必要がない場合、最も簡単な解決策は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
を使用します。
ファイルに一貫したフォーマット(つまり、改行)がある限り、これは基本的なファイル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
あなたが探しているものに合うことを願っています。
最初にリストを定義しましょう:
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)