Python文件用双标签分隔

时间:2015-06-22 01:57:13

标签: python

我是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','']

应该只有三列数据,但由于分隔字段的双选项卡,它会占用额外的空字段。

2 个答案:

答案 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并将其称为一天。