簡體   English   中英

使用python從文件讀取特定行

[英]read specific lines from a file using python

我有一個數據如下的文件:

   1xxy
   (1gmh)

[white line]
ahdkfkbbmhkkkkkyllllkkjdttyshhaggdtdyrrrutituy
[white line]  
   __________________________________________________
   Intra Chain:
   A 32
   __________________________________________________
   PAIR 1MNS HE 10 NM A ARG 33 OX1 3.22 32
   PAIR 1MNS UR 11 NM A ARG 33 OX2 3.21 12
   PAIR IMNS UK 32 NH A ASN 43 OZ1 5.21 22
   ...
   __________________________________________________

現在我想使它像:

   PAIR 1MNS HE 10 NM A ARG 33 OX1 3.22 32
   PAIR 1MNS UR 11 NM A ARG 33 OX2 3.21 12
   PAIR IMNS UK 32 NH A ASN 43 OZ1 5.21 22
   ...

即刪除所有其他字符。 我嘗試使用:

inp = open('c:/users/rox/desktop/1UMG.out','r')
for line in inp:
    if not line.strip():      # to remove excess whit lines
       continue
    else:
       z = line.strip().replace('\t',' ')
       if z.startswith('PAIR'):
          print z
inp.close()

但是這段代碼也沒有給我任何輸出。 無法弄清為什么z.startswith('PAIR')無法正常工作。 但是到上一行為止,一切都很好。

看起來您只在看以PAIR開頭的行,所以為什么不這樣簡單:

with open('data.txt') as infp:
   for line in infp:
      line = line.strip()
      if line.startswith('PAIR'):
         print(line)

會給:

PAIR 1MNS HE 10 NM A ARG 33 OX1 3.22 32
PAIR 1MNS UR 11 NM A ARG 33 OX2 3.21 12
PAIR IMNS UK 32 NH A ASN 43 OZ1 5.21 22

此輸出將刪除前3個空格,如果需要的話,將它們重新添加起來很簡單。

注意 :使用with將在完成操作或遇到異常時自動為您關閉文件。

除了@Levon的解釋之外,由於文件對象支持迭代器協議,並且根據文件的大小,可以使用列表推導:

[l for l in open('test.txt') if l.startswith('PAIR')]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM