在python3中将文件名重命名为整数序列

时间:2017-04-25 06:57:56

标签: python python-3.x file-rename

我需要在包含许多文本文件的文件夹中重命名文件名。 重命名应遵循每个文件的数字序列。 它应该如下:

***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代码的文件夹中。但我需要重命名的文件放在它们所在的同一文件夹中

1 个答案:

答案 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来处理它。