2016-12-22 79 views
0

我告訴你我的問題。 一個表是這樣的:替換和拆分線

gi|494115682|ref|WP_007055464.1| MULTISPECIES: dephospho-CoA kinase [Bifidobacterium] 
    gi|614110824|sp|P9WIB2.1|PHLB_MYCTO RecName: Full=Phospholipase C 2; Flags: Precursor 
    gi|446269943|ref|WP_000347798.1| MULTISPECIES: amino acid ABC transporter permease [Vibrio] 
    gi|446561267|ref|WP_000638613.1| acetyltransferase [Staphylococcus aureus] 

當我做line.split(「|」)到最後管分離‘|’,一些行沒有空的空間剛過,並在最後,我不能獲得一張明確的桌子。 例如:

GI | 614110824 | SP | P9WIB2.1 | PHLB_MYCTO RecName:完全=磷脂酶C 2;標誌:前體

我的意圖是取代最後的'|'到'\ t'並在'\ t'分割後。使用上面的這一行,我無法將所需位置的所有行分開。

for g in file: 
    name = g.replace('| ', '|\t'). 

條()分裂( '\ T')

如果我首先通過拆分。 '|' 如何糾正這條線以將第四條管道包圍時替換爲「|」。 '和執行拆分後?

預先感謝您。

+1

您可以發佈你想要的結果? –

+0

爲什麼你在''|上分割''而不是''|''?使用沒有空格的'|'並使用列表的第-1個元素。 – Fejs

回答

2
text = 'gi|494115682|ref|WP_007055464.1| MULTISPECIES: dephospho-CoA kinase [Bifidobacterium]' 
text.rsplit('|',1) 

出:

['gi|494115682|ref|WP_007055464.1', 
' MULTISPECIES: dephospho-CoA kinase [Bifidobacterium]'] 

str.rsplit(SEP =無,maxsplit = -1)

返回在 串的單詞的列表,使用月作爲分隔符字符串。如果給出maxsplit,則在 大多數maxsplit分裂完成,最右邊的分裂。如果sep不是 指定或None,則任何空格字符串都是分隔符。

1

我懷疑你真正想要csv模塊:

import io 
import csv 

file = io.StringIO(''' 
gi|494115682|ref|WP_007055464.1| MULTISPECIES: dephospho-CoA kinase [Bifidobacterium] 
gi|614110824|sp|P9WIB2.1|PHLB_MYCTO RecName: Full=Phospholipase C 2; Flags: Precursor 
gi|446269943|ref|WP_000347798.1| MULTISPECIES: amino acid ABC transporter permease [Vibrio] 
gi|446561267|ref|WP_000638613.1| acetyltransferase [Staphylococcus aureus] 
'''.strip()) 

reader = csv.reader(file, delimiter='|') 
for row in reader: 
    print(row) # or print('\t'.join(row))