如何根据另一个文件中的列对文件进行排序?

How to sort a file according to a column in another file?

我有一个文件,我想根据另一个文件中的列进行排序。两个文件有一个共同的列,排序应该按照第一个文件的排序方式。

例如: File_1 包含:

chr2L   2808299 2808300 EOG698VMB   4.15912 +   1011

chr2L   5218259 5218260 EOG6ZPFGT   15.0025 +   91

chr2L   5329859 5329860 EOG62JPCT   30.1536 +   30

chr2L   6225049 6225050 EOG60024V   3.26788 +   29

chr2L   6255843 6255844 EOG61C7HF   12.6259 +   32

chr2L   6481023 6481024 EOG6CZC26   1.33686 +   176

chr2L   8522135 8522136 EOG6FN543   40.2544 +   142

chr2L   9769068 9769069 EOG6FBJDN   17.8248 +   15

chr2L   9782391 9782392 EOG6R24FN   9.50656 +   393

File_2 包含:

chrXL_group1e   895799  895800  EOG67ST24   71.1687 +   62

chrXL_group1e   3113233 3113234 EOG6PVPKK   7.19303 +   847

chrXL_group1e   3424413 3424414 EOG6QC1SM   6.76991 +   81

chrXL_group1e   5698899 5698900 EOG651FCJ   93.5094 +   124

chrXL_group1e   6595546 6595547 EOG60K8KJ   28.349  +   185

chrXL_group1e   7594832 7594833 EOG6C2HX6   1.7771  +   2782

chrXL_group1e   8307304 8307305 EOG6NP7QS   229.754 +   35

chrXL_group1e   9922625 9922626 EOG6X3HMJ   8.8855  +   3744

chrXL_group1e   10297871 10297872 EOG6F7P63 2.70796 +   106

chrXL_group1e   11284647    11284648    EOG62Z5BX   282.474 +   4173

chr4_group5 213215  213216  EOG6J9NKZ   834.56  +   32

chrXR_group5    636614  636615  EOG6PVPK4   4.56969 +   152

我想根据File_1的第4列(蛋白质ID)给出的顺序对File_2的内容进行排序。 (示例中会有差异,如果你要,我可以上传原始文件。) 我如何在 Python 中执行此操作?
我不认为蛋白质 ID 是以任何特定方式排序的。但是它们在 File_1 中的排序方式很重要。

其他详情:

编程语言:Python3.5.1

OS:Ubuntu 16.04 LTS

感谢您的回答。 :)

函数 sorted 可以接收一个名为 key 的关键字参数,该函数 returns 为列表的每个元素提供一个可比较的参数。

如果你有两个列表,其中一个是 File_1 列,另一个是 File_2 列,你可以使用:

indexes = sorted(range(len(File_2Column)), key=lambda i: File_1Col4[i])
sortedFile_2Col = [File_2Column[i] for i in indexes]
# you can repeat this line for all the columns you want to be sorted by that order