在python3.3中将csv作为列表导入

2024-09-27 09:33:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含2个字符串和1个整数的列表

list_of_ee = [["a","m",15],["w","p",34]]

我用这个代码把这个导出到csv文件。在

^{pr2}$

结果是

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和2str和1integer)(当我的程序重新启动时)在list_of_ee 我想把它们添加到list_of_ee(因为当程序启动时,里面并没有数据 list_of_ee。在


Tags: 文件ofcsv字符串代码程序列表data
2条回答

因为CSV的数据类型和CSV格式没有区别。在

您可以try执行以下操作:

for lst in list_of_ee:
    for i,l in enumerate(lst):
        try:
            lst[i] = int(l)
        except:
            pass

将子列表中的数字元素转换为整数。在

如果你使用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格式。在

^{pr2}$

JSON是将数据导出到其他程序的好方法。在

但是,如果您只想为自己的Python程序保存数据,则更容易:只需使用picklehttp://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文件。在

相关问题 更多 >

    热门问题