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

renaming filenames to integer sequence in python3

我需要重命名包含许多文本文件的文件夹中的文件名。 重命名应遵循每个文件的编号顺序。 它应该如下所示:

***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 代码所在的文件夹中 written.but 我需要将重命名的文件放在它们之前存在的同一文件夹中

太好了,那么你尝试了什么?

作为起点,请查看 os-module, especially os.walk() and 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.

来处理