在目录中重命名子文件夹 - Python

5
我想使用Python重命名目录中的所有子文件夹。我认为这应该很容易,但由于我是Python和编程的新手,我认为我可能缺少一些关键的东西。
这是我的文件夹结构:C:\Users\DBailey\Desktop\Here - 这个文件夹中有两个名为3303_InfigenSolar和3304_FurnaceCanyon的文件夹。
- 在这些文件夹中有4个其他子文件夹,在这些文件夹中还有一堆文件。
我想批量重命名只有3303_InfigenSolar和3304_FurnaceCanyon这两个文件夹,使它们读取为3303_InfigenSolar_08315和3304_FurnaceCanyon_08315。
以下是我的代码:
now = datetime.datetime.now()
month = "0" + str(now.month)
day = now.day
year1 = str(now.year)
year2 = year1[2:]
date = str(month) + str(day) + str(year2)
newname = fn + "_" + str(date)

dir = 'C:\Users\DBailey\Desktop\Here'
folder = os.listdir(dir)
for fn in folder:
    print newname
    os.rename(fn, newname)

当我运行这个脚本时,只有一个文件夹被打印出来(虽然只有两个文件夹,但将添加更多文件夹),并且我会收到如下错误:
Traceback (most recent call last):
  File "<interactive input>", line 2, in <module>
WindowsError: [Error 2] The system cannot find the file specified

请注意,您的代码和迄今为止提供的答案将重命名文件,因为您没有仅过滤文件夹。 - Mdev
@DavidBailey,请考虑删除标签[tag:batch-file],因为它实际上在这里不适用。 - aschipfl
2个回答

3

您需要使用os.path.join

_dir = 'C:\Users\DBailey\Desktop\Here'
os.rename(os.path.join(_dir, fn), os.path.join(_dir,newname))

Python正在你的当前工作目录中查找fn,除非你的当前工作目录实际上是文件所在的目录,否则你需要使用join告诉Python文件实际上位于哪里。

如果你有多个目录需要重命名,在循环中还需要确保为每个目录创建唯一的名称。

dte = str(date)
for ind,fn in enumerate(folder,1):
    os.rename(os.path.join(_dir, fn), os.path.join(_dir,"{}_{}".format(dte,ind)))

您可以使用任何方式来区分文件夹名称,但请确保它们是唯一的。这也假定您只有目录,如果您有文件,则需要检查每个fn是否实际上是一个目录:

dte = str(date)
folder = (d for d in  os.listdir(_dir))
for ind,fn in enumerate(folder,1):
    p1 = os.path.join(_dir, fn)
    if os.path.isdir(p1):
        os.rename(p1, os.path.join(_dir,"{}_{}".format(dte,ind)))

1
似乎'fn'在被引用之前没有初始化。你可能不需要'newname',只需按照Padraic所说的做即可,去掉'newname'即可。
os.rename(os.path.join(dir,fn), os.path.join(dir, fn + "_" + str(date)))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接