字符串的Python数字排序

时间:2018-10-29 17:33:20

标签: python sorting

如何使GNU coreutils中的Python排序行为像sort -n一样?

这是我的images.txt

Vol. 1/Vol. 1 - Special 1/002.png
Vol. 1/Chapter 2 example text/002.png
Vol. 1/Vol. 1 Extra/002.png
Vol. 1/Chapter 2 example text/001.png
Vol. 1/Vol. 1 Extra/001.png
Vol. 1/Chapter 1 example text/002.png
Vol. 1/Vol. 1 - Special 1/001.png
Vol. 1/Chapter 1 example text/001.png

当我运行此Bash脚本时:

#!/bin/bash

cat images.txt | sort -n

我得到以下输出:

Vol. 1/Chapter 1 example text/001.png
Vol. 1/Chapter 1 example text/002.png
Vol. 1/Chapter 2 example text/001.png
Vol. 1/Chapter 2 example text/002.png
Vol. 1/Vol. 1 Extra/001.png
Vol. 1/Vol. 1 Extra/002.png
Vol. 1/Vol. 1 - Special 1/001.png
Vol. 1/Vol. 1 - Special 1/002.png

但是当我运行此Python脚本时:

#!/usr/bin/env python3

images = []

with open("images.txt") as images_file:
    for image in images_file:
        images.append(image)

images = sorted(images)

for image in images:
    print(image, end="")

我得到以下输出,这不是我所需要的:

Vol. 1/Chapter 1 example text/001.png
Vol. 1/Chapter 1 example text/002.png
Vol. 1/Chapter 2 example text/001.png
Vol. 1/Chapter 2 example text/002.png
Vol. 1/Vol. 1 - Special 1/001.png
Vol. 1/Vol. 1 - Special 1/002.png
Vol. 1/Vol. 1 Extra/001.png
Vol. 1/Vol. 1 Extra/002.png

如何用Python达到与Bash和sort -n相同的结果?

2 个答案:

答案 0 :(得分:2)

虽然我不是专家,但看来'-'与Python的订购顺序不同。解决此特定问题的快速方法是在排序时将' - '替换为' '

L = sorted(L, key=lambda x: x.replace(' - ', ' '))

答案 1 :(得分:0)

您可能还需要考虑使用lambda替换所有非字母数字字符

images = sorted(images, key=lambda x: re.sub('[^A-Za-z\d]+', '', x))