【发布时间】:2020-06-15 23:18:12
【问题描述】:
我自己编写了一个脚本,它每 2 秒下载一次图片并将它们放入一个文件夹中。现在我希望我下载的第一张图片命名为“1”,第二张图片命名为“2”,依此类推。它可以从“0”开始。这不是很重要。我猜错误在于getctime,因为排序有点混乱。
由于我对文件进行了排序,os.listdir 随机顺序应该无关紧要。我不认为我搞砸了lambda 函数,但目前我很茫然。我尝试使用getmtime,但它也不起作用。
程序结果是这样的:
分配的数字似乎是随机的。 Ctime 在保存到 file_data_list 之前不应更改。 Count+extension 可能会引发错误,但很容易修复。 我尝试在 13 分钟内下载的 450 张图片上运行此程序,每张图片之间间隔 2 秒,因此 ctime 属性的分辨率应该不是问题。
import os
filelist = os.listdir('./')
# get the list of all files in the directory and sort them after creation time
file_date_list = sorted(filelist, key=lambda x: os.path.getctime(x))
# go through the sorted list and rename them
for count,file in enumerate(file_date_list):
filename, extension = os.path.splitext(file)
os.rename(file, count+extension)
input()
【问题讨论】:
-
这是否引发了错误(例如,
TypeError: unsupported operand type(s) for +: 'int' and 'str')?结果出了什么问题? -
结果是,文件在ctime之后没有排序。我压缩了在此处发布的代码。最初我连接了两个字符串,而不是一个字符串和一个 int。结果如下:i.imgur.com/duMBDa1.png第二列是升序的日期。
-
多个文件可能具有相同的 ctime,从而使它们在该时间范围内的相对位置是任意的。对我的系统进行的快速测试显示时间变化约为 4 毫秒。
-
但是他们是否在原始 ctime 的基础上获得了顺序增加的数字?在 linux/mac 中,rename 改变了 ctime,这里似乎也发生了这种情况。并且将来的目录列表将是任意的,除非该列表将由实用程序按字母顺序排序。您的实用程序也可以按 ctime 排序,但在重命名时发生了变化。
-
这也是我想知道的。我想,我是真正的保存,因为我将下载间隔了 2 秒。我不知道,如果写入文件的 ctime 属性的时间是我实际下载它的时间。如果下载时间过长,可能会出现问题。我总共在 13 分钟内下载了大约 450 张图片。所以我下载的第一个文件不应该是118。我检查了很多图片,Windows资源管理器的排序方式是正确的。
标签: python sorting integer file-rename creation