python - 按 python 中的第一列(或第二列,否则)对文件进行排序

标签 python python-2.7 sorting

这似乎是一个非常基本的问题,但我是 python 的新手,在花了很长时间尝试自己寻找解决方案之后,我认为是时候请教一些更高级的人了!

所以,我有一个文件(样本):

ENSMUSG00000098737  95734911    95734973    3   miRNA
ENSMUSG00000077677  101186764   101186867   4   snRNA
ENSMUSG00000092727  68990574    68990678    11  miRNA
ENSMUSG00000088009  83405631    83405764    14  snoRNA
ENSMUSG00000028255  145003817   145032776   3   protein_coding
ENSMUSG00000028255  145003817   145032776   3   processed_transcript
ENSMUSG00000028255  145003817   145032776   3   processed_transcript
ENSMUSG00000098481  38086202    38086317    13  miRNA
ENSMUSG00000097075  126971720   126976098   7   lincRNA
ENSMUSG00000097075  126971720   126976098   7   lincRNA

我需要用所有相同的信息编写一个新文件,但按第一列排序。

到目前为止我使用的是:

lines = open(my_file, 'r').readlines()
output = open("intermediate_alphabetical_order.txt", 'w')

for line in sorted(lines, key=itemgetter(0)):
    output.write(line)

output.close()

它不会返回任何错误,只是将输出文件完全按照输入文件写入。

我知道这肯定是一个非常基本的错误,但如果你们中的一些人能告诉我我做错了什么,那就太棒了!

非常感谢!

编辑

我在打开文件的方式上遇到了问题,所以关于已经打开的数组的答案并没有真正的帮助。

最佳答案

您遇到的问题是您没有将每一行都变成一个列表。当您读入文件时,您只是将整行作为字符串获取。然后,您将按每行的第一个字符排序,这始终是您输入的相同字符,'E'

要仅按第一列排序,您需要拆分第一个 block 并只阅读该部分。所以你的 key 应该是这样的:

for line in sorted(lines, key=lambda line: line.split()[0]):

split 会将您的行变成一个列表,然后从该列表中取出第一列。

关于python - 按 python 中的第一列(或第二列,否则)对文件进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34158103/

相关文章:

c++ - 对数组C++中的最大和最小值进行排序

python - 从单词列表中提取更多相似的单词

python - 关闭 shell 后保持 python 代码运行

python - 如何访问 Item Pipeline Scrapy 中的请求对象

python - 使用FTPlib上传一个200kb的html页面

sql - 什么时候适合使用index_scan来获取已经排序的数据?

php - 启动进程,从 ps 隐藏参数

python - 从 urllib3.util.ssl_ 导入(导入错误 : cannot import name ssl

python - 对 Python2.7 和 Python3 中具有 View 的数据类型进行子类化

java - 对数组列表进行排序