2

絶えず追加されているファイルのディレクトリがあります。1日に複数のファイルが入る場合もありますが、その数は異なる場合があります。ファイルをスキャンし、ファイルが作成された日付に基づいてファイルの名前を変更するスクリプトを定期的に実行し、その日に複数のファイルがあった場合はイテレータを使用したいと思います。

これが私がこれまでに持っているものです

#!/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

それはうまくいくようですが、スクリプトを2回実行すると、ファイル名が時期尚早に変更されます(つまり、date1-1.mp4がdate1-2.mp4になります)。

助言がありますか?

4

2 に答える 2

2

初めてファイルの名前を変更したとき、あなたが言うように、ファイルのフォルダーdate1-1.mp4, date2-1.mp4があります。

2 回目の実行では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 に答える
2

余分なチェックを追加if filename == tempname: continue

于 2012-09-13T00:40:46.047 に答える