Python 如何根据一个项目的用户定义的特定顺序对行进行排序?
我有一个文件,里面有很多行: 原子4703 CA GLN D 328 102.64 45.75 42.46 1.00236.44 C 我想根据第4项行对它们进行排序。split[4],在这种情况下,它是d,按特定顺序排列,例如第一行带d, 然后用E表示行, 然后用一个等的线 到目前为止,我的python代码如下:Python 如何根据一个项目的用户定义的特定顺序对行进行排序?,python,file,sorting,Python,File,Sorting,我有一个文件,里面有很多行: 原子4703 CA GLN D 328 102.64 45.75 42.46 1.00236.44 C 我想根据第4项行对它们进行排序。split[4],在这种情况下,它是d,按特定顺序排列,例如第一行带d, 然后用E表示行, 然后用一个等的线 到目前为止,我的python代码如下: for counter in range(3): if counter == 0: if line.split()[4] == 'D':
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)`
def key(line):
splitted = line.split()
return ordering.index(splitted[4])
lines.sort(key=key)
但是,它只得到包含D的行。有什么帮助吗?我认为问题在于,要按照您想要的方式解决这个问题,您应该运行三次循环:在第一次迭代中打印值为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
要对行进行排序,为什么不使用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表达式看起来很复杂,则可以对键使用完整的函数定义,如下所示:
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)`
def key(line):
splitted = line.split()
return ordering.index(splitted[4])
lines.sort(key=key)
请记住,在python中,缩进很重要,最后两个if语句应该与第一个if语句对齐。尝试修复缩进。在我的脚本中,它们是对齐的:显示外部循环,在其中循环所有行。我认为问题在于,要按照您所希望的方式解决这个问题,您应该运行三次循环:在第一次迭代中打印值为“D”的行,在第二次迭代中打印值为“A”的行,依此类推。我发现了问题所在。要循环遍历每一行,我必须重新打开输入文件。你知道有什么诀窍吗,伦登?还是每次我想循环所有行时都必须打开和关闭文件?当然!它起作用了!非常感谢。所以,不是每次打开和关闭文件,我应该用读线读取文件。非常感谢你。