使用python对文本文件中的每行数字数据按行排序
我有一个包含3列数字数据的文本文件,我想按降序分别对文件的每一行进行排序 输入文件:使用python对文本文件中的每行数字数据按行排序,python,sorting,Python,Sorting,我有一个包含3列数字数据的文本文件,我想按降序分别对文件的每一行进行排序 输入文件: 12 10 5 1 120 3 -1 1 10 -1 -1 -1 输出文件: 12 10 5 120 3 1 10 1 -1 -1 -1 -1 我刚刚试着像这样使用sorted()函数: with codecs.open('BI_TA','r') as f: with codecs.open('ta_sort','w') as ff: for line in f.readlines
12 10 5
1 120 3
-1 1 10
-1 -1 -1
输出文件:
12 10 5
120 3 1
10 1 -1
-1 -1 -1
我刚刚试着像这样使用sorted()
函数:
with codecs.open('BI_TA','r') as f:
with codecs.open('ta_sort','w') as ff:
for line in f.readlines():
line=sorted(line)
ff.write(line)
但这不起作用。替换:
line=sorted(line)
作者:
假设当前行是'11203'。以下操作将应用于此行:
line.split()
排序(['1','120','3'],key=int,reverse=True)
->['120','3','1']
由于key=int
的原因,按降序排序或将每个值视为int
line='''.join(['120','3','1'])
->“120 3 1”
将列表转换为字符串,因为file.write()
只接受字符串list(line).sort()应该可以工作。它会给出如下错误:ff.write(line)TypeError:应为字符缓冲区对象,因为
write
不应为list
,而sorted
会返回此错误。另外,请注意,您正在对字符进行排序,这不是您想要的。查找str.split
和str.join
@johnsharpe:听起来像是我的答案…@DSM是的,我在文件写入操作之前尝试过使用print,我可以看到它像列表一样读取行,而不是读取120,它读取为“1”、“2”、“0”等等。。但是我如何让它读取该列中的全部值呢?你知道有一个用于这类内容的库:。请注意,这将按字典顺序排序,而这不是OP想要的。另外,对您所做的更改以及更改原因的一些解释也会有所帮助。@BHATIRSHAD如果这样做可行,但您能否解释一下逻辑,我确实理解拆分和连接字符串的逻辑。请更正,根据文档,键参数允许在比较前将列表中的每个元素转换为整数,因此,它将按数字排序。我不知道那个小把戏@BHATIRSHAD我不知道钥匙,谢谢你的解释。不,它真的不应该;它与排序(行)没有什么不同,只是不能分配结果(因为排序已就位)。
line=' '.join(sorted(line.split(), key=int, reverse=True))