gpt4 book ai didi

python - 如何在 Python 中自然排序 Pathlib 对象?

转载 作者:太空宇宙 更新时间:2023-11-03 20:18:20 26 4
gpt4 key购买 nike

我正在尝试在 ./pages 目录中创建一个排序的文件列表。这是我到目前为止所拥有的:

import numpy as np
from PIL import Image
import glob
from pathlib import Path


# sorted( l, key=lambda a: int(a.split("-")[1]) )
image_list = []

for filename in Path('./pages').glob('*.jpg'):
# sorted( i, key=lambda a: int(a.split("_")[1]) )
# im=Image.open(filename)
image_list.append(filename)

print(*image_list, sep = "\n")

当前输出:

pages/page_1.jpg  
pages/page_10.jpg
pages/page_11.jpg
pages/page_12.jpg
pages/page_2.jpg
pages/page_3.jpg
pages/page_4.jpg
pages/page_5.jpg
pages/page_6.jpg
pages/page_7.jpg
pages/page_8.jpg
pages/page_9.jpg

预期输出:

pages/page_1.jpg   
pages/page_2.jpg
pages/page_3.jpg
pages/page_4.jpg
pages/page_5.jpg
pages/page_6.jpg
pages/page_7.jpg
pages/page_8.jpg
pages/page_9.jpg
pages/page_10.jpg
pages/page_11.jpg
pages/page_12.jpg

我已经尝试了 duplicate 中找到的解决方案,但它们不起作用,因为 pathlib 文件是类对象,而不是字符串。它们仅在我打印时显示为文件名。

例如:

print(filename) # pages/page_1.jpg  
print(type(filename)) # <class 'pathlib.PosixPath'>

最后,这是工作代码。谢谢大家。

from pathlib import Path
import numpy as np
from PIL import Image
import natsort

def merge_to_single_image():
image_list1 = []
image_list2 = []
image_list3 = []
image_list4 = []

for filename in Path('./pages').glob('*.jpg'):
image_list1.append(filename)

for i in image_list1:
image_list2.append(i.stem)
# print(type(i.stem))

image_list3 = natsort.natsorted(image_list2, reverse=False)

for i in image_list3:
i = str(i)+ ".jpg"
image_list4.append(Path('./pages', i))

images = [Image.open(i) for i in image_list4]
# for a vertical stacking it is simple: use vstack
images_combined = np.vstack(images)
images_combined = Image.fromarray(images_combined)
images_combined.save('Single_image.jpg')

最佳答案

可以使用natsort lib ( pip install natsort 。它看起来也应该很简单。
[!这有效,至少针对版本 5.5 和 7.1(当前)进行了测试]

from natsort import natsorted

image_list = Path('./pages').glob('*.jpg')
image_list = natsorted(image_list, key=str)

# Or convert list of paths to list of string and (naturally)sort it, then convert back to list of paths
image_list = [Path(p) for p in natsorted([str(p) for p in image_list ])]

关于python - 如何在 Python 中自然排序 Pathlib 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58312120/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com