2

我有一个不断添加的文件目录。有时每天有几个文件进入,但数量可能会有所不同。我想定期运行一个脚本来扫描文件并根据文件的创建日期重命名它们+如果当天有多个文件,则使用一些迭代器。

这是我到目前为止所得到的

#!/usr/bin/python
import os
import datetime
target = "/target_dir"
os.chdir(target)
allfiles = os.listdir(target)
for filename in allfiles:
        if not os.path.isfile(filename):
                continue
        t = os.path.getmtime(filename)
        v= datetime.datetime.fromtimestamp(t)
        x = v.strftime('%Y%m%d')
        loop = 1
        iterator = 1
        temp_name = x + "_" + str(iterator)
        while loop:
                if not os.path.exists(temp_name + '.mp4'):
                        os.rename(filename, temp_name + '.mp4')
                        loop = 0
                else:
                        temp_name = x + '_' + str(iterator)
                        iterator+=1

这似乎可行,但如果我第二次运行脚本,它会过早地更改文件名(即 date1-1.mp4 变为 date1-2.mp4 等)

有什么建议么?

4

2 回答 2

2

添加额外支票if filename == tempname: continue

于 2012-09-13T00:40:46.047 回答
2

当您第一次重命名文件时,您将拥有一个文件文件夹:date1-1.mp4, date2-1.mp4,如您所说。

在第二次运行时,该行if not os.path.exists(temp_name + '.mp4'):会说文件date1-1.mp4已经存在 - 即文件本身 - 然后将继续循环,直到未使用的文件名可用:date1-2.mp4

我的解决方案如下:(基本上相当于汉斯的回答)

#!/usr/bin/python
import os
import datetime
target = + "/target_dir"
os.chdir(target)
allfiles = os.listdir(target)
for filename in allfiles:
    if not os.path.isfile(filename):
        continue
    t = os.path.getmtime(filename)
    v= datetime.datetime.fromtimestamp(t)
    x = v.strftime('%Y%m%d')
    loop = 1
    iterator = 1
    temp_name = x + "_" + str(iterator) + '.mp4'

    while filename != temp_name:
        if not os.path.exists(temp_name):
            os.rename(filename, temp_name)
            filename = temp_name
        else:
            iterator+=1
            temp_name = x + '_' + str(iterator) + '.mp4'
于 2012-09-13T00:45:48.027 回答