【发布时间】:2015-09-26 01:46:24
【问题描述】:
我正在处理一个 csv 导入,但遇到了一个应该是列表形式但被读取为字符串的值的问题。
其中一个 csv 行如下所示:
['name1', "['name2', 'name3']"]
如您所见,第二列中的值是一个列表,但被读取为字符串。我的问题是我需要遍历该列表,并且该列表的长度可能因行而异。
我想知道问题出在哪里。 csv read 不能处理列表吗?有没有办法将第二列中的字符串转换为列表而不是使用正则表达式? 这是我正在运行的代码:
import csv
import os
content = []
file_path = os.path.abspath(file)
if os.path.exists(file_path):
with open(file_path, 'rb') as csvfile:
csvreader = csv.reader(csvfile, delimiter = ',')
for row in csvreader:
content.append(row)
for row in content[1:5]:
print row
print row[0], row[1]
for name in row[1]:
print name
输出行看起来如上,但是当遍历 row[1] 时,它不会遍历名称列表,而是遍历每个字符。有人有想法吗? 提前感谢您的帮助!
【问题讨论】:
-
不,csv 模块无法将字符串转换为列表,您可以添加一个输入示例吗?您是如何最终将列表写入文件的?
-
感谢@PadraicCunningham 的快速回答。在另一个应用程序中,将一个单元格中的多个字符串值保存到 csv 是有意义的。行看起来像第一个示例 ['name1', "['name2', 'name3']"]。可能有更好的方法来处理这个问题?
-
为什么结构是
['name1', "['name2', 'name3']"].?嵌套列表如何结束? -
@PadraicCunningham 我将提供更多背景信息。 csv 显示不同用户之间的交互。所以整行如下所示:
[date, text, id, 'name1', "['name2', 'name3']"]表示 user1 提到了 user2 和 user3。在创建 csv 时,它似乎是最方便的解决方案 -
我认为也许存储 dicts 或者使用 pandas 是个好主意,你在用这些数据做什么?