我有一个列表,包含2个字符串和1个整数
list_of_ee = [["a","m",15],["w","p",34]]
我使用此代码将其导出到csv文件。
import csv
myfile = open("pppp.csv", 'wb')
with open("pppp.csv", "w",newline='') as myfile:
wr = csv.writer(myfile, quoting=csv.QUOTE_NONE)
wr.writerows(list_of_ee)
结果是
a m 15
w p 34
我使用此代码导出
data = csv.reader(open('pppp.csv','r', newline=''))
data = list(data)
print(data)
,结果是
[['a', 'm', '15'], ['w', 'p', '34']]
但是我希望在list_of_ee
中导入与原来相同的结果(作为列表列表,并使用2 str和1整数)(当我的程序重启时)
我想将它们添加到list_of_ee
(当程序启动时,becoz没有数据)
list_of_ee
。
答案 0 :(得分:2)
如果您使用CSV,则会获得字符串。请参阅文档:http://docs.python.org/2/library/csv.html#module-contents
“不执行自动数据类型转换。”
@hcwhsa向您指出了一个答案,该答案显示了如何使用ast.literal_eval()
来猜测类型。这不是太难:
import ast
import csv
def convert_type(s):
try:
return ast.literal_eval(s)
except (ValueError, SyntaxError):
return s
def convert_csv_row(lst):
return [convert_type(x) for x in lst]
data = csv.reader(open('pppp.csv','r', newline=''))
converted = [convert_csv_row(row) for row in data]
print(converted)
但实际上,如果你想保留类型,为什么还要使用CSV呢?除非您将数据导出到电子表格或其他内容,否则我建议您使用JSON格式。
import json
list_of_ee = [["a","m",15],["w","p",34]]
with open("test.json", "wt") as f:
f.write(json.dumps(list_of_ee))
with open("test.json", "rt") as f:
s = f.read()
lst = json.loads(s)
print(lst)
assert list_of_ee == lst
JSON是将数据导出到其他程序的好方法。
但如果您只是想为自己的Python程序保存数据,那就更容易了:只需使用pickle
即可。 http://docs.python.org/2/library/pickle.html
import pickle
list_of_ee = [["a","m",15],["w","p",34]]
with open("test.pickle", "wb") as f:
f.write(pickle.dumps(list_of_ee))
with open("test.pickle", "rb") as f:
bytes_data = f.read()
lst = pickle.loads(bytes_data)
print(lst)
assert list_of_ee == lst
使用pickle
,您需要以二进制模式而不是文本模式写入和读取文件。使用pickle
,您可以保存几乎任何Python本机类型,而不仅仅是JSON支持的基本类型。但几乎只有Python程序读取pickle
文件。
答案 1 :(得分:1)
由于CSV格式没有数据类型的概念,因此没有以CSV内置的方式执行您所要求的操作。也就是说,它不区分字符串和整数。
你可以try
做这样的事情:
for lst in list_of_ee:
for i,l in enumerate(lst):
try:
lst[i] = int(l)
except:
pass
将子列表的数字元素转换为整数。