我只是想知道如何从具有下一个结构的 CVS 文件中读取特殊字段:
40.0070222,116.2968604,2008-10-28,[["route"], ["sublocality","political"]]
39.9759505,116.3272935,2008-10-29,[["route"], ["establishment"], ["sublocality", "political"]]
我过去使用的阅读 cvs 文件的方式:
with open('routes/stayedStoppoints', 'rb') as csvfile:
spamreader = csv.reader(csvfile, delimiter=',', quotechar='"')
问题是我可以使用的前 3 个字段没问题:
for row in spamreader:
row[0],row[1],row[2] 我可以毫无问题地访问。但在最后一个字段中,我猜 csv.reader(csvfile, delimiter=',', quotechar='"') 也为每个子列表拆分:
所以当我尝试访问时,请告诉我:
[["route"]
任何人都有处理最后一个字段的解决方案有一个完整的列表(确实是列表的列表)
[["route"], ["sublocality","political"]]
为了可以访问每个类别。
谢谢
最佳答案
你的格式接近json。您只需要将每一行括在方括号中,并引用日期。
对于每一行 l
只做:
lst=json.loads(re.sub('([0-9]+-[0-9]+-[0-9]+)',r'"\1"','[%s]'%(l)))
导致 lst
成为
[40.0070222, 116.2968604, u'2008-10-28', [[u'route'], [u'sublocality', u'political']]]
需要导入json解析器和正则表达式
import json
import re
edit:您询问了如何访问包含“route”的元素。答案是
lst[3][0][0]
'政治'在
lst[3][1][1]
如果字符串('political' 和其他)可能包含看起来像日期的字符串,您应该使用@unutbu 的解决方案
关于Python:使用列表列表读取CSV文件的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17136199/