2012-07-25 50 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:]] 
相關問題