2012-07-25 70 views
2

我有一些大的数据文件,我想复制出每行的某些数据,基本上是一个ID代码。身份证号码的一面有|,另一面有空格。我想知道是否可以提取ID。另外我有两个数据文件,一个每行有4个ID码,另一个每行有23个ID码。如何使用python复制文件中的特定数据?

目前我正在考虑像从数据文件中复制每一行,然后相互减去字符串以获得所需的ID代码,但肯定必须有一个更简单的方法!帮帮我?

这里是我与

cluster8032: WoodR1|Wood_4286 Q8R1|EIK58010 F113|AEV64487.1 NFM421|PSEBR_a4327 

工作,并从该行我会想输出在单独的行

Wood_4286 
EIK58010 
AEV644870.1 
PSEBR_a4327 
+0

“*像从数据文件复制每一行,然后减去彼此*字符串” - 你可以展示我们你的代码? – eumiro 2012-07-25 13:51:08

+0

您是否想要搜索某个特定的'cluster8032'数字,或者是否希望每行都生成四(或二十三)行输出? – DSM 2012-07-25 14:03:42

回答

5

使用正则表达式从数据文件中一行的例子模块用于这样的任务。下面的代码展示了如何从一个字符串中提取ID(只要它们的结构相同)就可以用于任意数量的ID。

import re 
s = """cluster8032: WoodR1|Wood_4286 Q8R1|EIK58010 F113|AEV64487.1 NFM421|PSEBR_a4327""" 
results = re.findall('\|([^ ]*)',s) #list of ids that have been extracted from string 
print('\n'.join(results)) #pretty output 

输出:

Wood_4286 
EIK58010 
AEV64487.1 
PSEBR_a4327 

要将输出写入到一个文件:

with open('out.txt', mode = 'w') as filehandle: 
    filehandle.write('\n'.join(results)) 

有关详细信息,请参阅regex module documentation

+0

您的输出与问题的输出不匹配。你需要使用一个贪婪的星星,并遵循一个空格:'\ |([^ |] *?)' – badzil 2012-07-25 14:00:26

+1

是的,我注意到了(我误解了这个问题)。现在已经修好了,谢谢。上面的代码正常工作。 – Lanaru 2012-07-25 14:02:36

+0

非常感谢您的帮助 – TheFoxx 2012-07-25 14:06:32

1

如果所有的线具有给定的格式,一个简单的分割是不够的:

#split by '|' and the result by space 
ids = [x.split()[0] for x in line.split("|")[1:]] 
相关问题