首页 > 解决方案 > 是否可以将字符串列表保存到 CSV 并再次将其作为(字符串)列表读取?

问题描述

我遇到了一个尴尬的问题:我想解析一个大的 csv 文件,封装其中的一些信息(包括关键字列表,'err')并将内容存储到另一个 csv 文件。

我要做的是:

with open('auswertung.json', 'w') as raus:
craus = csv.DictWriter(raus, ['entr', 'yr', 'err', 'lang', 'status',
    'plat', 'os'], dialect='unix')
craus.writeheader()
leser = csv.reader(f)

for z in leser:
    problems = []
    kat = {'entr': z[0], 'yr': int(z[0][4:8]), 'err': None, 'lang': None,
            'status': z[1], 'plat': None, 'os': None}

    kat['err'] = ['one', 'two', 'three']

more stuff
craus.writerow(kat)

但是,模块将 'err' 存储为

"['one', 'two', 'three']"

当我尝试在另一个程序中使用 DictReader 阅读它时。那是一个字符串...使用 list() 对其进行强制转换会创建一个列表,其中所有字母都作为列表成员。

这是一个错误还是不打算用 csv 存储值列表?我怎样才能解决这个问题?

“unix”风格只是一个实验。默认样式不会改变任何东西

标签: python-3.xcsv

解决方案


这是一个错误吗

当然不是。

您可能会发现 JSON 比 CSV 格式更适合您的需求,zB die name 'auswertung.json' 表明您已经开始探索这一点。编写器将str()在将每个元素序列化为 CSV 时调用它。您可能会发现dumps()(或转储)是您的朋友。

如果您愿意$ pip install pandas,您可能会发现这pd.to_csv()是一种序列化一堆行(或pd.to_json())的便捷方式。

风格 nit:最好每行列出一个值:

    kat = dict(entr=z[0],
               yr=int(z[0][4:8]),
               err=None,
               lang=None,
               status=z[1],
               plat=None,
               os=None)

推荐阅读