我是python的新手,我正在编写一个脚本来读取由双标签分隔的文件(除了第一行由单个标签分隔"
我尝试了以下内容:
f = open('data.csv', 'rU')
source = list(csv.reader(f,skipinitialspace=True, delimiter='\t'))
for row in source:
print row
问题是csv.reader不会使用两个字符的分隔符。有没有一种方法可以使双标签定界器工作?
目前的输出如下:
['2011-11-28 10:25:44', '', '2011-11-28 10:33:00', '', 'Showering', '']
['2011-11-28 10:34:23', '', '2011-11-28 10:43:00', '', 'Breakfast', '']
['2011-11-28 10:49:48', '', '2011-11-28 10:51:13', '', 'Grooming','']
应该只有三列数据,但由于分隔字段的双选项卡,它会占用额外的空字段。
答案 0 :(得分:1)
如果性能在这里不是问题,那么你可以使用这种快速而苛刻的解决方案。
f = open('data.csv', 'rU')
source = list(csv.reader(f,skipinitialspace=True, delimiter='\t'))
for row in source:
print row[::2]
对于上面提到的输出,row [:: 2]对列表行进行跨步。对于上面提到的输出,索引跨越偏移量(这里是2)是一种方法!
答案 1 :(得分:0)
您对数据了解多少?条目是否有可能包含双标签?如果没有,我会放弃csv
模块并使用简单的方法:
with open('data.csv') as data:
for line in data:
print line.strip().split('\t\t')
csv
模块很适合做一些棘手的事情,例如确定分隔符应该分割字符串的时间,以及何时不应该分隔字符串,因为它是条目的一部分。例如,假设我们使用空格作为分隔符,我们有一行如:
"this" "is" "a test"
我们用引号括住每个条目,给出三个条目。显然,如果我们使用分裂空间的方法,我们将得到
['"this"', '"is"', '"a', 'test"']
这不是我们想要的。 csv
模块在这里很有用。但是,如果我们能够保证无论何时出现空格,它都是分隔符,那么就不需要使用csv
模块的强大功能。只需使用str.split
并将其称为一天。