使用Python的DictReader读取CSV列表
我的CSV文件长这样:
YY,XX,ZZ
[14, 18, 13, 0],"[7, 7, 9, 9]",[]
现在我用dictread这样做:
csv_file = csv.DictReader(open(test_file, 'r'), delimiter=',', quotechar='"')
for line in csv_file:
a=line
现在我得到的是:
print(a)
>> {'XX': '[7, 7, 9, 9 ]', 'YY': '[14, 18, 13, 0 ]', 'ZZ': '[]'}
print(a["XX"])
>> [7, 7, 9, 9]
b=a["XX"]
print(b[0])
>> [
我想把CSV里的元素读成一个字典,但值应该放在一个列表里,所以我想得到一个7,而不是一个[:
print(a)
>> {'XX': '[7, 7, 9, 9 ]', 'YY': '[14, 18, 13, 0 ]', 'ZZ': '[]'}
print(a["XX"])
>> [7, 7, 9, 9]
b=a["XX"]
print(b[0])
>> 7 <----
我该怎么做呢?
2 个回答
1
在编程中,有时候我们会遇到一些问题,尤其是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,特别是当我们不太了解这些工具的工作原理时。
比如,有人可能会在使用某个特定的功能时,发现它并没有按照预期的方式运行。这时候,我们就需要去查找原因,看看是不是有什么地方没有设置对,或者是使用的方法不太正确。
通常,解决这些问题的第一步是仔细阅读相关的文档,了解这个功能的具体用法和注意事项。如果文档不够清晰,我们还可以在网上搜索相关的讨论,看看其他人是怎么解决类似的问题的。
总之,遇到问题时,不要着急,慢慢分析,查找资料,通常都能找到解决办法。
import ast
csv_file = csv.DictReader(open(test_file, 'r'), delimiter=',', quotechar='"')
def proc_line(line):
keys,vals = zip(*line.items())
return dict(zip(keys,map(ast.literal_eval,vals)) )
for line in map(proc_line,csv_file):
keys,vals = zip(line.items())
a=dict(zip(keys,map(ast.literal_eval,vals)) )
3
你快到了。
你现在有一些看起来像列表的字符串,但它们其实是字符串。只需要通过 ast literal_eval 来过滤字典中的字符串元素,这样就可以把它们解析回 Python 列表了:
>>> di={'XX': '[7, 7, 9, 9 ]', 'YY': '[14, 18, 13, 0 ]', 'ZZ': '[]'}
>>> import ast
>>> for k in di:
... di[k]=ast.literal_eval(di[k])
...
>>> di
{'YY': [14, 18, 13, 0], 'XX': [7, 7, 9, 9], 'ZZ': []}