从python中的文本中提取行

时间:2014-11-12 06:28:15

标签: python startswith writefile

我正在尝试提取以此条目开头的行并创建一个新文件。这就是我所拥有的:

def ReadFileContents():
    file_content = open('Testing.pdb')
    all_file_content = file_content.readlines()
    list3 = []
    for line in all_file_content:
        if line.startswith('TER'):`enter code here`
            list3.append(line)
            if line.startswith('HETATM'):
                list3.apped(line)
                if line.startswith('CONECT'):
                    list3.append(line)
                    if line.startswith('MASTER'):
                        list3.append(line)
                        if line.startswith('END'):
                            list3.append(line)
            file = open('list3.txt', 'w')
            for line in list3:
                file.write(line + '\n')
            file.close()

ReadFileContents()

问题是只使用以TER开头的行创建list3.txt文件。有什么想法吗?

谢谢, 佩德罗

3 个答案:

答案 0 :(得分:1)

行开头的空格表示python中的代码块级别。 假设您有以下代码:

if A:
    #do something
    if B:
        #do another thing
仅当条件为another thing时,

True才会完成。

def ReadFileContents():
    file_content = open('Testing.pdb')
    all_file_content = file_content.readlines()
    list3 = []
    for line in all_file_content:
        if line.startswith('TER'):
            list3.append(line)
        if line.startswith('HETATM'):
            list3.apped(line)
        if line.startswith('CONECT'):
            list3.append(line)
        if line.startswith('MASTER'):
            list3.append(line)
        if line.startswith('END'):
            list3.append(line)
    file = open('list3.txt', 'w')
    for line in list3:
        file.write(line + '\n')
    file.close()

答案 1 :(得分:1)

最好使用elif而不是nested if。最好使用context manager with打开文件,而不需要close手动的文件。

改变这个: -

file_content = open('Testing.pdb')
all_file_content = file_content.readlines()

到此: -

with open('Testing.pdb') as file_content:

然后完整的代码是: -

def ReadFileContents():
    list3 = []
    with open('Testing.pdb') as file_content: # Use `with`.
        for line in file_content.readlines():      
            if line.startswith('TER'):
                list3.append(line)
            elif line.startswith('HETATM'):
                list3.append(line)
            elif line.startswith('CONECT'):
                list3.append(line)
            elif line.startswith('MASTER'):
              list3.append(line)
            elif line.startswith('END'):
               list3.append(line)
    with open('list3.txt', 'w') as f:
        for line in list3:
            f.write(line + '\n')

        #Read the file
         f.seek(0)
         print f.read()

ReadFileContents()

答案 2 :(得分:0)

import re
def ReadFileContents():
file_content = open('Testing.pdb')
all_file_content = file_content.readlines()
list3 = []
for line in all_file_content:
        m=re.match(r"^(?:TER|HETATM|CONECT|MASTER|END).*$,line)
        if m:
            list3.append(m.group())





file = open('list3.txt', 'w')
for line in list3:
      file.write(line + '\n')
file.close()

你可以使用re来获得你想要的东西。它也更具可扩展性。