2017-09-08 48 views
0

enter image description here我想將每一行寫入一個新文件,除了那些在這個特定空間中有H的文件。我真的不知道爲什麼這不是工作,它複製整個文件1。 我想要得到字符13,我的代碼實際上是這樣做的,所以不需要提出這個建議。問題一定在某個地方。如何跳過文件中的特定行?

謝謝

import fileinput 
import sys 

f1 = open('file1', 'r') 
f2 = open('file2', 'w') 
for line in f1: 
    if len(line) > 50 and line[13] != 'H': 
     f2.write(line) 
    else: 
     continue 

f1.close() 
f2.close() 

文件例如:

+2

請發佈您的文件樣本和您希望的樣本輸出。 – Ajax1234

+0

你可以給你一個你想要跳過的文件和示例文件的例子嗎? – Jake

+0

你是什麼意思是「複製」file1?可以確切地說出什麼是錯的? –

回答

2

這假定H總是由另一個條目進行:

import fileinput 
import sys 

f1 = open('file1', 'r') 
f2 = open('file2', 'w') 
for line in f1: 
    temp = line.split() 
    if len(temp) > 2: 
     if temp[-2] != 'H': 
      f2.write(line) 
    else: 
     f2.write(line) 

f1.close() 
f2.close() 

它拆分如果下TO-每一行,並檢查最後一個元素是H

如果該行少於2個元素,則跳過它並將其寫入文件。

你以前的程序實際上在這個意義上的作品,它不打印包含Hline[13]線,但在評論你的問題中提到,你正在尋找一些行轉移,由於其他數據的H 。因此,一些含氫的譜線被去除,Hline[13]被刪除,而其他譜段被寫入輸出文件。

+0

謝謝。當我嘗試運行這個時,我得到這個:Traceback(最近調用最後一個): 如果line.split()[ - 2]!='H':IndexError:列表索引超出範圍 – Loki

+0

ATOM 263 C PRO D 493 44.901 12.877 -35.260 1.00503.07 C ATOM 264 O PRO D 493 44.333 13.810 -34.693 1.00503.07 O ATOM 0 HA PRO D 493 45.449 10.978 -34.586 1.00503.07 H新的 ATOM 0 HB2 PRO D 493 43.192 11.390 -36.270 1.00503。07 H new ATOM 0 HB3 PRO D 493 43.542 9.893 -36.005 1.00503.07 H new這看起來不是正確的格式。我正在嘗試格式化。有沒有辦法附加一個文件? – Loki

+0

https://www.dropbox.com/s/9sxvj4avfas0x2f/converted_4MWF_IVAT_rich.pdb?dl=0希望這會起作用 – Loki

相關問題