如何使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
相同的结果?
答案 0 :(得分:2)
虽然我不是gnu专家,但看来'-'
与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))