2015-06-22 41 views
0

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

应该只有三列数据,但是,由于分隔字段的双选项卡,它将拾取额外的空字段。

回答

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并称之为一天。

1

如果在这里性能不是问题,那么你会用这个快速和黑客解决方案好吗。

f = open('data.csv', 'rU') 
source = list(csv.reader(f,skipinitialspace=True, delimiter='\t')) 

    for row in source: 
     print row[::2] 

行[:: 2]不为是2对于上述输出倍数指标在列表行了一大步,指数由一大步偏移(这里是其2)是一条路可走!