我有一个包含这些行的文件:
ATOM 4703 CA GLN D 328 102.64 45.75 42.46 1.00236.44 C
我希望按照特定顺序对第4项(line.split()[4]
,对于本案例为D)进行排序,例如带D的第一行,
然后用E线,
然后用A等线。
到目前为止,我的python代码如下:
for counter in range(3):
if counter == 0:
if line.split()[4] == 'D':
outputFile.write(line)
if counter == 1:
if line.split()[4] == 'E':
outputFile.write(line)
if counter == 2:
if line.split()[4] == 'A':
outputFile.write(line)`
但是,它只获得包含D的行。有什么帮助吗?
答案 0 :(得分:0)
我认为问题在于,要以你想要的方式解决这个问题,你应该运行三次循环:在第一次迭代中打印那些值为D
的行,在第二次迭代中打印那些A
等等。您的代码应如下所示:
# Store the lines in an array, this way you don't to reopen the file.
f = open('filename')
lines = f.readlines()
for line in lines:
if line.split()[4] == 'D':
print line
for line in lines:
if line.split()[4] == 'E':
print line
for line in lines:
if line.split()[4] == 'A':
print line
答案 1 :(得分:0)
您想对行进行排序,那么为什么不将list.sort
与键功能一起使用?
with open('text.txt') as f:
lines = f.read().splitlines()
ordering = ['D', 'E', 'A']
lines.sort(key=lambda x: ordering.index(x.split()[4]))
for line in lines:
print(line)
虽然不推荐,但如果lambda表达式似乎很复杂,您可以使用key
的完整函数定义,如下所示:
def key(line):
splitted = line.split()
return ordering.index(splitted[4])
lines.sort(key=key)