Python 如果文件夹中存在文件,请更改文件夹的名称
我有一个非常大的目录树,如果文件夹中有文件,我想通过它自动更改文件夹名称。以下是我目前的情况:Python 如果文件夹中存在文件,请更改文件夹的名称,python,Python,我有一个非常大的目录树,如果文件夹中有文件,我想通过它自动更改文件夹名称。以下是我目前的情况: import os import shutil from os import path import glob # Directory to be scanned os.chdir('U:\\') path = '.' # r=root, d=directories, f = files for r, d, f in os.walk(path): for file in f:
import os
import shutil
from os import path
import glob
# Directory to be scanned
os.chdir('U:\\')
path = '.'
# r=root, d=directories, f = files
for r, d, f in os.walk(path):
for file in f:
if '.txt' in file:
dir_path = os.path.dirname(os.path.realpath('stuff.txt'));
os.rename(dir_path, dir_path + '_data')
我收到以下错误,但目前没有管理员权限,无法确保脚本正常工作
PermissionError:[WinError 32]进程无法访问该文件,因为另一个进程正在使用该文件:“U:\”->“U:\ \U数据”
您收到的错误消息似乎与任何权限问题无关。我建议打开“计算机管理”并转到“共享文件夹>打开文件”。这将显示谁打开了文件,阻止您的重命名工作。您不能以这种方式修改驱动器名(
U:///code>),因此您会收到第一个许可错误。您也不能在迭代过程中修改目录名(os.walk
),否则将丢失子文件夹。因此,我提议如下:
创建空列表以记住要重命名的目录路径
扫描完成后,反转列表并在其上迭代-这样,应该首先处理最长的路径
重命名目录或通知错误
代码如下:
导入操作系统
#要扫描的目录
os.chdir('U:\\')
路径='。'
dirs_to_rename=list()
对于os.walk(路径)中的根目录、目录和文件:
对于文件中的文件:
如果文件中有“.txt”:
dirs\u to\u rename.append(根目录)
打破
对于dir_to_rename in dirs_to_rename[::-1]:
尝试:
打印(f“将{dir_重命名为{u rename}”)
重命名(dir_to_rename,dir_to_rename+“_data”)
除O错误为e外:
打印(f“跳过{dir_to_rename}-{e}”)
我很快用几层文件夹运行了它,它似乎运行得很好,但您可能需要对它进行一些调整。尝试list(os.walk)
,一次获取所有名称。听起来好像另一个进程正在访问您试图重命名的目录。确保没有运行任何可能会执行此操作的内容。我认为问题在于您正在更改正在迭代的内容。谢谢!我还意识到应该在dirs\u to\u rename.append(root\u dir)
之后插入一个break
,以避免两次添加相同的路径。编辑了答案以反映这一点。