2012-08-09 56 views
2

我正在处理一个小项目,并且遇到了一个问题。保留制表符后.split()

我读文件像这样(注意,原来的文件大约有40K行):

35 IMAGE:1679942 SAMD4 Sterile alpha motif domain Hs.98259 ATI146610 
36 IMAGE:1700154   AI049531 
37 IMAGE:1865232   AI269361 

正如你可以看到,有一些细胞,其包含的信息,有些不是。 所以我希望在没有信息存储的每个单元格中,N/A。我怎样才能做到这一点? .split()确实没有这些单元格的列表。是否有解决方案,我怎样才能把所有这些水龙头在列表中即line = ["36", "IMAGE:1700154", "", "", "", "AI049531", ...]

+1

列是否对齐?如何定义“单元格”? – 2012-08-09 09:35:29

+2

这是一个txt文件,也没有电池的定义 也许这会有所帮助: 35 \的TImage:1679942 \ tSAMD4 \ tSterileα基序域\ tHs.98259 \ tATI146610 36 \的TImage:1700154 \ t \ t \ tAI049531 – 2012-08-09 09:36:59

+0

所以这些列由标签'\ t'分隔吗? – 2012-08-09 09:39:30

回答

2

您可以split在标签(编辑运用注释数据):

data = """35\tIMAGE:1679942\tSAMD4\tSterile alpha motif domain\tHs.98259\tATI146610 
36\tIMAGE:1700154\t\t\tAI049531""" 

for line in data.split("\n"): 
    print line.split("\t") 

结果:

['35', 'IMAGE:1679942', 'SAMD4', 'Sterile alpha motif domain', 'Hs.98259', 'ATI146610'] 
['36', 'IMAGE:1700154', '', '', 'AI049531'] 
+0

这个解决方案对于这种情况是错误的,因为它看起来像这样: line = [“36”,“IMAGE:1700154”,“AI049531”,...]并且我需要空点 – 2012-08-09 09:45:53

+0

为什么它是假的?什么不行? – 2012-08-09 09:46:11

+1

谢谢,多数民众赞成它:)我以为我已经尝试过它......但似乎不是:D非常感谢 – 2012-08-09 09:52:24

0

您必须先准备好数据,然后才能将其导入CSV并随后导入您所需的列表格式。

1)通过查找栏的最大数量开始你就必须

2)找到的每一行项目的模式。例如。 A *,Sterite *等。希望这种模式可以区分不同的行项目。

3)对于每一行,执行row.split(“\ t”)`并将每个行项与模式匹配以在行中找到正确的索引。

4)newRow[correct_index] = oldrow[index] and "" for others