首页 文章

如何识别并适当地解析由Python创建的csv数据中的列表

提问于
浏览
1

我正在使用Python导出和导入CSV数据 . 当写入CSV时,某些单独的段/值最初是列表 . python CSV库将这些值输出为由方括号括起的CSV .

当我读回数据时,也使用CSV库,它无法识别列表的存在,而是将其作为单个字符串读取 .

有什么方法可以将列表作为列表而不是字符串读回来吗?我宁愿不使用split(',')手动操作字符串 .

import csv

dummy_data = [['list value 1', 2, 'list value 3', '',], 'string 1', 'string 2', 3, ]
dummy_csv = 'c:\\temp\\out.csv'
with open(dummy_csv, 'w') as file:
    cw = csv.writer(file)
    cw.writerow(dummy_data)

这将写到c:\ temp \ out.csv:

"['list value 1', 2, 'list value 3', '']",string 1,string 2,3

从文件中读回来:

with open(dummy_csv) as file:
    cr = csv.reader(file)
    for row in cr:
        print(row[0])

...将列表值打印为单个文字字符串:

"['item 1', 2, 'item 3']"

如何干净利落地将此字符串转换回列表?

我提出的最好的方法是在检测并剥离方括号后使用csv库重新解析字符串 . 这比使用split(',')稍微好一些,因为它会更好地处理转义字符,但感觉很烦人:

with open(temp_csv) as file:
    cr = csv.reader(file)
    for row in cr:
        for segment in row:
            if segment and segment[:1] == '[' and segment[-1:] == ']':
                for list_segment in csv.reader([segment.strip('[] ')]):
                    print([e.strip(" '""") for e in list_segment])

这将返回具有值的所需列表:

['item 1', '2', 'item 3']

是的,不幸的是,数据必须以CSV格式保存到文件中;如果由我决定我会使用JSON,这不会是一个问题 .

谢谢你的帮助!

Update: 我不相信这是一个重复的问题,因为我假设(并希望)在我忽略的csv库中有一些选项或参数 .

1 回答

  • 1

    您可以使用

    import ast
    your_string = "['item 1', 2, 'item 3']"
    ast.literal_eval(your_string)
    

    如果所有字符串都被引用,那么您也可以使用

    import json
    your_string = u'["item 1", "2", "item 3"]'
    json.loads(your_string)
    

    或者你可以使用numpy

    import numpy
    your_string = "['item 1', 2, 'item 3']"
    np.array(your_string)
    

相关问题