我正在尝试提取以此条目开头的行并创建一个新文件。这就是我所拥有的:
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文件。有什么想法吗?
谢谢, 佩德罗
答案 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
来获得你想要的东西。它也更具可扩展性。