-2

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

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()

读取文件内容()

问题是只创建了以 TER 开头的行的 list3.txt 文件。任何想法为什么?

谢谢,佩德罗

4

3 回答 3

1

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

if A:
    #do something
    if B:
        #do another thing

another thing仅当 A 条件为 时才会执行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()
于 2014-11-12T06:35:58.187 回答
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()
于 2014-11-12T06:37:56.803 回答
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来得到你想要的。它也更具可扩展性。

于 2014-11-12T07:17:22.723 回答