如何以字母数字顺序写回文件的已排序行

时间:2018-11-15 02:38:05

标签: python

def sortall(string):
    if not string:
        return []
    return (sortall([x for x in string[1:] if x < string[0]])
            + [string[0]] +
            sortall([x for x in string[1:] if x >= string[0]]))


file = open("sorting.txt", "r+")
for line in file.readline():
    xd = (''.join(sortall(line)))
    file2 = open("sorting.txt", "w")
    file2.write(xd)

我如何使我的代码打印出排序的文件行,但是当这样做时,它会按升序进行打印。

2 个答案:

答案 0 :(得分:0)

读取整个文件,排序并写入新文件:

with open('file1', 'r') as f:
    lst = f.readlines()
    with open('file2', 'w') as w:
        w.writelines(sorted(lst))

如果“已排序”应使用一些特殊的排序,请在“键”参数中提供比较功能:

print(help(sorted))
  

已排序(可重复,/,*,键=无,反向=错误)
     返回一个新列表,其中包含迭代中所有项目的升序。

     

可以提供自定义键功能来自定义排序顺序,然后      可以设置反向标志以按降序请求结果。

答案 1 :(得分:0)

这是一种更简洁的方法:

with open('sorting.txt', 'r+') as f:
    sorted_lines = sorted(f.readlines())
    f.writelines(sorted_lines)

如您在此处看到的:https://docs.python.org/3/howto/sorting.html,您可以提供可调用项以自定义顺序。

  

已排序(可重复,/,*,键=无,反向=错误)
     返回一个新列表,其中包含迭代中所有项目的升序。

     

可以提供自定义键功能来自定义排序顺序,然后      可以设置反向标志以按降序请求结果。