2013-10-30 48 views
-2

的幫助下,我有一個巨大的文本文件(models.txt),包含像波紋管給出線:我如何拆分一個巨大的txt文件與Python

Model 1 
text 
text 
text 
text 
END 

Model 2 
text 
text 
text 
text 
END 

Model 3 
text 
text 
text 
text 
END 

我想編寫一個函數,以便它可以以「模型1」,「模型2」和「模型3」作爲起點,以「END」作爲終點,並寫出相應模塊的放置文件model_1.txt,model_2.txt和Model_3.txt

因爲我不知道太多的編程,所以我寫這個

a = open('C:/Users/Zebrafish/Desktop/AHR_human_modeling/human/edited/1AHH.B99990013.pdb','r') 
lines = a.readlines() 

x = 1 

for line in lines: 
    if 'END' in line: 
     PDB_file = open('C:/Users/Zebrafish/Desktop/AHR_human_modeling/human/edited/model_1.pdb','w') 
     PDB_file.write(line) 
     PDB_file.close() 
+1

很抱歉,但SO不是你的個人密碼的工廠......告訴我們你到目前爲止所嘗試過的。 –

+0

更新您的問題,而不是張貼未格式化的代碼作爲評論。 –

+0

是這個重複? [如何-DO-分割-A-巨大的文本文件功能於蟒(http://stackoverflow.com/questions/291740/how-do-i-split-a-huge-text-file- in-python?rq = 1) –

回答

4
from itertools import groupby 
with open('infile') as f: 
    groups = groupby(f, key=str.isspace) 
    for k, lines in groups: 
     if k: 
      continue 
     fname = next(lines).strip().lower().replace(' ', '_')+'.txt' 
     with open(fname, 'w') as outf: 
      outf.writelines(lines) 
+0

這段代碼做了什麼? – aIKid

+2

它分裂了一個巨大的文件 –

0

如果你的文件裝入內存,那麼你可以使用正則表達式來拆分文件,然後遍歷匹配:

with open('models.txt') as handle: 
    models = re.findall("Model.*?END", handle.read(), re.MULTILINE|re.DOTALL) 
    for i, model in enumerate(models): 
     with open('model_%s.txt' % i) as output: 
      output.write(model) 
+1

但是如果字母'END'出現在其中一個文本行中呢? –

+0

@gnibbler,那麼它將無法正確工作。希望OP將其標記爲答案。 – miku

+0

如果你要閱讀整個文件,我想你可能會逃避'handle.read()。split('\ n \ n')' –