リストscore = [1,2,3,4,5]があり、プログラムの実行中にリストが変更されたとします。次回プログラムを実行するときに、変更されたリストにリストタイプとしてアクセスできるように、ファイルに保存するにはどうすればよいですか?
私が試してみました:
score=[1,2,3,4,5]
with open("file.txt", 'w') as f:
for s in score:
f.write(str(s) + '\n')
with open("file.txt", 'r') as f:
score = [line.rstrip('\n') for line in f]
print(score)
しかし、これにより、リスト内の要素は整数ではなく文字列になります。
テスト中にテキストファイルを開いてその内容を簡単に変更できるようにしたかったので、ピクルスを使用したくないと決めました。したがって、私はこれをしました:
score = [1,2,3,4,5]
with open("file.txt", "w") as f:
for s in score:
f.write(str(s) +"\n")
with open("file.txt", "r") as f:
for line in f:
score.append(int(line.strip()))
そのため、ファイル内のアイテムは、文字列としてファイルに保存されているにもかかわらず、整数として読み取られます。
そのためにpickle
モジュールを使用できます。このモジュールには2つのメソッドがあります。
https://docs.python.org/3.3/library/pickle.html コード:
>>> import pickle
>>> l = [1,2,3,4]
>>> with open("test.txt", "wb") as fp: #Pickling
... pickle.dump(l, fp)
...
>>> with open("test.txt", "rb") as fp: # Unpickling
... b = pickle.load(fp)
...
>>> b
[1, 2, 3, 4]
Pickleを使用したくない場合は、リストをテキストとして保存してから評価できます。
data = [0,1,2,3,4,5]
with open("test.txt", "w") as file:
file.write(str(data))
with open("test.txt", "r") as file:
data2 = eval(file.readline())
# Let's see if data and types are same.
print(data, type(data), type(data[0]))
print(data2, type(data2), type(data2[0]))
[0、1、2、3、4、5]クラス 'list'クラス 'int'
[0、1、2、3、4、5]クラス 'list'クラス 'int'
pickle
およびその他のシリアル化パッケージが機能します。インポートできる.py
ファイルに書き込みます。
>>> score = [1,2,3,4,5]
>>>
>>> with open('file.py', 'w') as f:
... f.write('score = %s' % score)
...
>>> from file import score as my_list
>>> print(my_list)
[1, 2, 3, 4, 5]
必要に応じて、numpyの保存機能を使用してリストをファイルとして保存できます。 2つのリストがあるとします
sampleList1=['z','x','a','b']
sampleList2=[[1,2],[4,5]]
ここにリストをファイルとして保存する関数があります。拡張子.npyを保持する必要があることを忘れないでください
def saveList(myList,filename):
# the filename should mention the extension 'npy'
np.save(filename,myList)
print("Saved successfully!")
そして、ここにリストにファイルをロードする関数があります
def loadList(filename):
# the filename should mention the extension 'npy'
tempNumpyArray=np.load(filename)
return tempNumpyArray.tolist()
実例
>>> saveList(sampleList1,'sampleList1.npy')
>>> Saved successfully!
>>> saveList(sampleList2,'sampleList2.npy')
>>> Saved successfully!
# loading the list now
>>> loadedList1=loadList('sampleList1.npy')
>>> loadedList2=loadList('sampleList2.npy')
>>> loadedList1==sampleList1
>>> True
>>> print(loadedList1,sampleList1)
>>> ['z', 'x', 'a', 'b'] ['z', 'x', 'a', 'b']
パンダを使用しています。
import pandas as pd
x = pd.Series([1,2,3,4,5])
x.to_Excel('temp.xlsx')
y = list(pd.read_Excel('temp.xlsx')[0])
print(y)
とにかくpandasを他の計算にインポートする場合に使用します。