2013-10-30 50 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')' –