我是python的新手,我正在尝试获得一个我拼凑起来工作的脚本。基本上,我有一个包含大约50个子目录的目录。我正在尝试让我的脚本: 1.将所有子目录名称存储在列表中
在每个子目录中创建一组文件夹(即subdir / folder1,folder2等)
进入每个子目录并将子目录中的文件移动到子目录中新创建的文件夹中(即subdir / folder1 / file1.ext,file2.ext)
运行我的脚本时出现以下错误:
Traceback (most recent call last):
File "./wsfonts.py", line 20, in <module>
os.makedirs(os.path.join(root_dir,folder),exist_ok=True)
File "/usr/lib/python3.5/posixpath.py", line 89, in join
genericpath._check_arg_types('join', a, *p)
File "/usr/lib/python3.5/genericpath.py", line 143, in
_check_arg_types
(funcname, s.__class__.__name__)) from None
TypeError: join() argument must be str or bytes, not 'list'
以下是该脚本的副本:
#!/usr/bin/python3
import os
import shutil
import sys
import fnmatch
root_dir = [d for d in os.listdir(os.curdir) if os.path.isdir(d)]
work_dir = ['Blaster','Clash','Force','Lockup','PowerOFF','PowerON','Sign1','Spin','Stab','Swing']
for folder in work_dir:
os.makedirs(os.path.join(root_dir,folder),exist_ok=True)
os.chdir(root_dir)
for file in os.listdir('.'):
dst = (work_dir)
if fnmatch.fnmatch(file, 'blaster*'):
shutil.move(file, dst[0])
if fnmatch.fnmatch(file, 'clash*'):
shutil.move(file, dst[1])
if fnmatch.fnmatch(file, 'force*'):
shutil.move(file, dst[2])
if fnmatch.fnmatch(file, 'lockup*'):
shutil.move(file, dst[3])
if fnmatch.fnmatch(file, 'p*w*off*'):
shutil.move(file, dst[4])
if fnmatch.fnmatch(file, 'p*w*on*'):
shutil.move(file, dst[5])
if fnmatch.fnmatch(file, 'combo*'):
shutil.move(file, dst[6])
if fnmatch.fnmatch(file, 'spin*'):
shutil.move(file, dst[7])
if fnmatch.fnmatch(file, 'stab*'):
shutil.move(file, dst[8])
if fnmatch.fnmatch(file, 'swing*'):
shutil.move(file, dst[9])
如果这篇文章格式不正确,请原谅我,因为这是我第一次在Stackoverflow上发帖。
亲切的问候,
麦克
答案 0 :(得分:0)
您的问题来自于root_dir
中尝试使用.join()
。 root_dir
是一个列表,因为列表推导会返回一个列表。您需要进一步解释您正在寻找的内容,以便我们提供帮助。
答案 1 :(得分:0)
这听起来像你想要的:
for root_folder in root_dir:
for folder in work_dir:
os.makedirs(os.path.join(root_folder, folder), exist_ok=True)