Python脚本排序和重命名文件 - 去重
我写了一个小脚本,用来重命名和排序与脚本在同一个文件夹里的文件。这个脚本会根据文件最后修改的时间,把文件重命名成整数(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,可能是之前排序时留下的),它就会直接把这个文件删掉……我该怎么防止这种情况发生呢?有没有什么方法可以修改代码,或者有没有更好的办法呢??
3 个回答
0
在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,不知道该怎么解决。比如,有人可能在使用某个特定的功能时,发现它并没有按照预期的方式工作。这种情况下,通常我们会去查找相关的资料或者在网上寻求帮助,比如在StackOverflow这样的平台上提问。
在提问的时候,清楚地描述问题是非常重要的。你需要告诉别人你在做什么,遇到了什么具体的错误,或者你希望实现什么样的功能。这样,其他人才能更好地理解你的问题,并给出有效的建议或解决方案。
有时候,问题的解决可能需要一些调试的过程。调试就是找出程序中哪里出了问题,通常需要你仔细检查代码,看看是否有拼写错误、逻辑错误或者是使用了不正确的参数等。
总之,遇到问题时不要着急,耐心地分析和查找资料,通常都能找到解决办法。
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))
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
你不能一个接一个地重命名文件,因为这样可能会在过程中覆盖掉已经排序好的文件。不过,你可以先用临时的名字来重命名,然后再在第二步中把文件改成最终的名字:
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))
(未经测试)