重命名目录中的子文件夹 - python
rename subfolders in a directory - python
我想使用 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
您需要os.path.join:
_dir = 'C:\Users\DBailey\Desktop\Here'
os.rename(os.path.join(_dir, fn), os.path.join(_dir,newname))
python 正在你的 cwd 中查找 fn
,你需要使用 join 来告诉 python 文件实际所在的位置,除非你的 cwd 实际上是文件所在的目录位于。
如果您有多个目录要重命名,您还需要确保为循环中的每个目录创建一个唯一的名称。
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)))
看起来 'fn' 在 newname 中引用之前未初始化。
你可能真的不需要 newname,只要按照 Padraic 所说的做,减去 newname:
os.rename(os.path.join(dir,fn), os.path.join(dir, fn + "_" + str(date)))
我想使用 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
您需要os.path.join:
_dir = 'C:\Users\DBailey\Desktop\Here'
os.rename(os.path.join(_dir, fn), os.path.join(_dir,newname))
python 正在你的 cwd 中查找 fn
,你需要使用 join 来告诉 python 文件实际所在的位置,除非你的 cwd 实际上是文件所在的目录位于。
如果您有多个目录要重命名,您还需要确保为循环中的每个目录创建一个唯一的名称。
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)))
看起来 'fn' 在 newname 中引用之前未初始化。 你可能真的不需要 newname,只要按照 Padraic 所说的做,减去 newname:
os.rename(os.path.join(dir,fn), os.path.join(dir, fn + "_" + str(date)))