如何将列表保存到文件并将其作为列表类型读取?
How to save a list to a file and read it as a list type?
假设我有列表 score = [1,2,3,4,5]
,它在我的程序运行时发生了变化。我怎样才能将它保存到一个文件中,以便下次运行该程序时,我可以将更改后的列表作为 list
类型访问?
我试过:
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)
但这会导致列表中的元素是字符串而不是整数。
您可以为此使用 pickle
模块。
这个模块有两个方法,
- Pickling(dump):将 Python 个对象转换为字符串表示形式。
- Unpickling(load):从存储的字符串表示中检索原始对象。
https://docs.python.org/3.3/library/pickle.html
代码:
>>> import pickle
>>> l = [1,2,3,4]
>>> with open("test", "wb") as fp: #Pickling
... pickle.dump(l, fp)
...
>>> with open("test", "rb") as fp: # Unpickling
... b = pickle.load(fp)
...
>>> b
[1, 2, 3, 4]
还有Json
- dump/dumps: 序列化
- load/loads:反序列化
https://docs.python.org/3/library/json.html
代码:
>>> import json
>>> with open("test", "w") as fp:
... json.dump(l, fp)
...
>>> with open("test", "r") as fp:
... b = json.load(fp)
...
>>> b
[1, 2, 3, 4]
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]
我决定不想使用 pickle,因为我希望能够在测试期间轻松打开文本文件并更改其内容。因此,我这样做了:
score = [1,2,3,4,5]
with open("file.txt", "w") as f:
for s in score:
f.write(str(s) +"\n")
score = []
with open("file.txt", "r") as f:
for line in f:
score.append(int(line.strip()))
所以文件中的项目被读取为整数,尽管作为字符串存储到文件中。
如果不想使用 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] class 'list' class 'int'
[0, 1, 2, 3, 4, 5] class 'list' class 'int'
我正在使用 pandas。
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 用于其他计算,请使用此选项。
如果需要,可以使用 numpy 的保存功能将列表保存为文件。
假设您有两个列表
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']
我不喜欢很多答案的是,它通过每行写入文件行来进行过多的系统调用。恕我直言,最好用'\n'(行return)加入列表,然后只将它写入文件一次:
mylist = ["abc", "def", "ghi"]
myfile = "file.txt"
with open(myfile, 'w') as f:
f.write("\n".join(mylist))
然后打开它并再次获取您的列表:
with open(myfile, 'r') as f:
mystring = f.read()
my_list = mystring.split("\n")
而 works, you should really be using python's json
模块(参见 post 的末尾以与 pickle
进行比较):
import json
score=[1,2,3,4,5]
with open("file.json", 'w') as f:
# indent=2 is not needed but makes the file human-readable
# if the data is nested
json.dump(score, f, indent=2)
with open("file.json", 'r') as f:
score = json.load(f)
print(score)
优点:
json
是一种广泛采用的标准化数据格式,因此非python 程序可以轻松阅读和理解 json 文件
json
文件是人类可读且易于编辑的(纯文本)
- 任何嵌套或非嵌套的 list/dictionary 结构都可以保存到
json
文件中(只要所有内容都是可序列化的)。
缺点:
- 数据以纯文本形式存储(即未压缩),这使得它对于大量数据来说是一个缓慢且 space 低效的选择。
- list/dictionary 的内容需要可序列化,然后才能将其保存为 json。
json
模块可以让你保存字符串、整数、浮点数、布尔值和 None 值,你需要编写自定义序列化和反序列化代码来保存对象、类 和函数.
pickle
vs json
,我应该用哪个?:
- 如果您想存储您知道只会在 python 程序上下文中使用的内容,请使用
pickle
- 如果您需要保存默认情况下不可序列化的数据(即对象),请省去麻烦并使用
pickle
- 如果您需要平台无关的解决方案,请使用
json
- 如果您需要能够直接检查和编辑数据,请使用
json
- 如果您需要稳健和长期的东西,请使用
json
(如果您更改 classes/files 的位置或对代码进行重大更改,pickle
将无法正常工作)
errorlist = ['aaaa', 'bbbb', 'cccc', 'dddd']
f = open("filee.txt", "w")
f.writelines(nthstring + '\n' for nthstring in errorlist)
f = open("filee.txt", "r")
cont = f.read()
contentlist = cont.split()
print(contentlist)
我遇到了类似的问题,我需要读取保存为文本文件的列表。该列表有多个层,因此使用 split 无济于事。
例如:
list1.txt
[(1,2,3),['a','b'],'a1']
所以我做了什么,我将 list.txt 更改为 list.py,然后从 python 文件导入列表。
例如:
list1.py
a = [(1,2,3),['a','b'],'a1']
然后:
from list1 import a
print(a)
假设我有列表 score = [1,2,3,4,5]
,它在我的程序运行时发生了变化。我怎样才能将它保存到一个文件中,以便下次运行该程序时,我可以将更改后的列表作为 list
类型访问?
我试过:
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)
但这会导致列表中的元素是字符串而不是整数。
您可以为此使用 pickle
模块。
这个模块有两个方法,
- Pickling(dump):将 Python 个对象转换为字符串表示形式。
- Unpickling(load):从存储的字符串表示中检索原始对象。
https://docs.python.org/3.3/library/pickle.html
代码:
>>> import pickle
>>> l = [1,2,3,4]
>>> with open("test", "wb") as fp: #Pickling
... pickle.dump(l, fp)
...
>>> with open("test", "rb") as fp: # Unpickling
... b = pickle.load(fp)
...
>>> b
[1, 2, 3, 4]
还有Json
- dump/dumps: 序列化
- load/loads:反序列化
https://docs.python.org/3/library/json.html
代码:
>>> import json
>>> with open("test", "w") as fp:
... json.dump(l, fp)
...
>>> with open("test", "r") as fp:
... b = json.load(fp)
...
>>> b
[1, 2, 3, 4]
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]
我决定不想使用 pickle,因为我希望能够在测试期间轻松打开文本文件并更改其内容。因此,我这样做了:
score = [1,2,3,4,5]
with open("file.txt", "w") as f:
for s in score:
f.write(str(s) +"\n")
score = []
with open("file.txt", "r") as f:
for line in f:
score.append(int(line.strip()))
所以文件中的项目被读取为整数,尽管作为字符串存储到文件中。
如果不想使用 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] class 'list' class 'int'
[0, 1, 2, 3, 4, 5] class 'list' class 'int'
我正在使用 pandas。
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 用于其他计算,请使用此选项。
如果需要,可以使用 numpy 的保存功能将列表保存为文件。 假设您有两个列表
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']
我不喜欢很多答案的是,它通过每行写入文件行来进行过多的系统调用。恕我直言,最好用'\n'(行return)加入列表,然后只将它写入文件一次:
mylist = ["abc", "def", "ghi"]
myfile = "file.txt"
with open(myfile, 'w') as f:
f.write("\n".join(mylist))
然后打开它并再次获取您的列表:
with open(myfile, 'r') as f:
mystring = f.read()
my_list = mystring.split("\n")
而 json
模块(参见 post 的末尾以与 pickle
进行比较):
import json
score=[1,2,3,4,5]
with open("file.json", 'w') as f:
# indent=2 is not needed but makes the file human-readable
# if the data is nested
json.dump(score, f, indent=2)
with open("file.json", 'r') as f:
score = json.load(f)
print(score)
优点:
json
是一种广泛采用的标准化数据格式,因此非python 程序可以轻松阅读和理解 json 文件json
文件是人类可读且易于编辑的(纯文本)- 任何嵌套或非嵌套的 list/dictionary 结构都可以保存到
json
文件中(只要所有内容都是可序列化的)。
缺点:
- 数据以纯文本形式存储(即未压缩),这使得它对于大量数据来说是一个缓慢且 space 低效的选择。
- list/dictionary 的内容需要可序列化,然后才能将其保存为 json。
json
模块可以让你保存字符串、整数、浮点数、布尔值和 None 值,你需要编写自定义序列化和反序列化代码来保存对象、类 和函数.
pickle
vs json
,我应该用哪个?:
- 如果您想存储您知道只会在 python 程序上下文中使用的内容,请使用
pickle
- 如果您需要保存默认情况下不可序列化的数据(即对象),请省去麻烦并使用
pickle
- 如果您需要平台无关的解决方案,请使用
json
- 如果您需要能够直接检查和编辑数据,请使用
json
- 如果您需要稳健和长期的东西,请使用
json
(如果您更改 classes/files 的位置或对代码进行重大更改,pickle
将无法正常工作)
errorlist = ['aaaa', 'bbbb', 'cccc', 'dddd']
f = open("filee.txt", "w")
f.writelines(nthstring + '\n' for nthstring in errorlist)
f = open("filee.txt", "r")
cont = f.read()
contentlist = cont.split()
print(contentlist)
我遇到了类似的问题,我需要读取保存为文本文件的列表。该列表有多个层,因此使用 split 无济于事。 例如:
list1.txt
[(1,2,3),['a','b'],'a1']
所以我做了什么,我将 list.txt 更改为 list.py,然后从 python 文件导入列表。 例如:
list1.py
a = [(1,2,3),['a','b'],'a1']
然后:
from list1 import a
print(a)