我正在使用Python从CSV导出数据和从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,这不会是一个问题。
感谢您的帮助!
更新 我不相信这是一个重复的问题,因为我假设(并希望)在我忽略的csv库中有一些选项或参数。
答案 0 :(得分: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)