0

我编写了一个小脚本,我需要在脚本所在的同一文件夹中重命名和排序文件。它根据文件的最后修改将文件重命名为整数 (1, 2, 3, 4, ...):

import os
import sys
def gtime(nam):
    return os.path.getmtime('./'+nam)
files = os.listdir('.')
files.remove(str(sys.argv[0])[2:])
files = sorted(files, key=gtime)
for fi in range(len(files)):
    os.rename('./'+files[fi], './'+str(fi+1))

这是我想出的最好的方法......问题是当有一个重复(例如一个文件已经命名为 1,可能来自以前的排序)它只是删除它.. 我怎样才能防止这种情况发生?? 我可以对代码进行任何修改或更好的替代方法吗???

4

3 回答 3

2

所以这里有一个示例,它将复制到子目录并避免复制脚本.pyc文件。

import os, sys
from os.path import exists, isfile, getmtime, join as pjoin
from shutil import copyfile

targetdir='process'
stub='inputfile'

if not exists(targetdir):
  os.mkdir(targetdir)

files = [ x for x in os.listdir('.') if isfile(pjoin('.',x)) and not x.startswith(sys.argv[0]) ]
pad = len(files)/10 + 1
for i,f in enumerate(sorted(files,key=lambda x: getmtime(pjoin('.',x)))):
  copytarget = pjoin('.',targetdir,"%s-%0.*d" % (stub,pad,i))
  print "Copying %s to %s" % (f,copytarget)
  copyfile(f,copytarget)
于 2011-09-01T11:10:35.117 回答
1

您不能一个接一个地重命名一个文件,因为在此过程中您可能会覆盖已排序的文件。但是,您可以先使用临时名称,然后在第二遍中将文件重命名为其最终名称:

import os
import sys
def gtime(nam):
    return os.path.getmtime('./'+nam)
files = os.listdir('.')
files.remove(str(sys.argv[0])[2:])
files = sorted(files, key=gtime)
for fi, file in enumerate(files):
    os.rename(file, str(fi+1)+".tmp")
for fi in range(len(files)):
    os.rename(str(fi+1)+".tmp", str(fi+1))

(未经测试)

于 2011-09-01T09:27:00.613 回答
0
import os.path
for fi in range(len(files)):
    if os.path.exists(str(fi+1)):
        print("Prevent that from happening") # whatever you want to do here
    else:
        os.rename(files[fi], str(fi+1))
于 2011-09-01T09:23:55.353 回答