【问题标题】:How to change the names of files to integers, so that files that were created later are named with larger numbers?如何把文件名改成整数,让后面创建的文件用更大的数字命名?
【发布时间】: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


【解决方案1】:

这会有帮助吗:

for count,file in enumerate(file_date_list):
    filename, extension = file.split('.',1)
    os.rename(file, f"{count}.{extension}")

【讨论】:

  • 不,没有。我加了“。”回来了,因为它被拆分删除了,但结果是一样的
  • 这似乎假设文件名只有一个点。
  • @Oddthinking 至少 那个 问题已修复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-18
  • 2018-11-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多