我写了一个小脚本,我需要在脚本所在的同一文件夹中重命名和排序文件。它根据文件的最后修改将文件重命名为整数(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,可能来自之前的排序)它只是删除它..我怎样才能防止这发生了什么?我可以对代码进行任何修改或更好的替代方式吗?
答案 0 :(得分: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)
答案 1 :(得分: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))
(未测试的)
答案 2 :(得分: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))