web-dev-qa-db-ja.com

リストをファイルに保存し、リストタイプとして読み取る方法

リスト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)

しかし、これにより、リスト内の要素は整数ではなく文字列になります。

25
Oceanescence

テスト中にテキストファイルを開いてその内容を簡単に変更できるようにしたかったので、ピクルスを使用したくないと決めました。したがって、私はこれをしました:

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()))

そのため、ファイル内のアイテムは、文字列としてファイルに保存されているにもかかわらず、整数として読み取られます。

17
Oceanescence

そのためにpickleモジュールを使用できます。このモジュールには2つのメソッドがあります。

  1. Pickling(dump):Pythonオブジェクトを文字列表現に変換。
  2. Unpickling(load):保存された文字列表現から元のオブジェクトを取得します。

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]
51
Vivek Sable

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'

11
Sarper Bilazer

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]
3
Mike McKerns

必要に応じて、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']
2
Manu Gond

パンダを使用しています。

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を他の計算にインポートする場合に使用します。

0