我需要在包含许多文本文件的文件夹中重命名文件名。 重命名应遵循每个文件的数字序列。 它应该如下:
***given files*** ***renamed files***
abc.txt 1.txt
def.txt 2.txt
rsd.txt 3.txt
ijb.txt 4.txt
上述文件位于名为data
我的代码就像这样
import glob
import os
file=sorted(glob.glob("/home/prasanth/Desktop/project/prgms/dt/details/*.txt"))
fp=[]
for b in file:
fp.append(b)
i=1
for f in fp:
n=f.replace('.html','')
n=n.replace('.htm','')
m=n.replace(n,str(i)+'.txt')
i=i+1
os.rename(f,m)
我的问题是重命名后的文件正在移动到写入python代码的文件夹中。但我需要重命名的文件放在它们所在的同一文件夹中
答案 0 :(得分:1)
太好了,你有什么尝试?
首先,请查看os
- 模块,尤其是os.walk()
和os.rename()
。
编辑:
您的文件已被移动,因为您使用m=n.replace(n,str(i)+'.txt')
替换了整个路径。这会将subfolder\textfile.txt
重命名为1.txt
,将文件作为副作用移动到当前目录。
此外,我不确定您尝试使用htm(l)-replaces实现什么,因为之后您将使用您的号码替换所有内容。
此外,您不需要构建txt文件列表的副本,然后对其进行迭代,您可以直接在原始文件列表上进行。
所以这可能适合你:
import glob
import os
filelist=sorted(glob.glob("/home/prasanth/Desktop/project/prgms/dt/details/*.txt"))
i=1
for oldname in filelist:
# ignore directories
if os.path.isfile(oldname):
# keep original path
basepath=os.path.split(oldname)[0]
newname=os.path.join(basepath, "{}.txt".format(str(i)))
i=i+1
print("Renaming {} to {}".format(oldname, newname))
os.rename(oldname, newname)
附注:当具有新文件名的文件已存在时,重命名将失败。您应该使用try ... except
来处理它。