如何根据另一个文件中的列对文件进行排序?
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
我有一个文件,我想根据另一个文件中的列进行排序。两个文件有一个共同的列,排序应该按照第一个文件的排序方式。
例如: 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