Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python对文本文件中的每行数字数据按行排序_Python_Sorting - Fatal编程技术网

使用python对文本文件中的每行数字数据按行排序

使用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

我有一个包含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():
             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))