我正在使用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 回答
您可以使用
如果所有字符串都被引用,那么您也可以使用
或者你可以使用numpy