如何解决如何使用 os.walk() 遍历根目录中的子目录?
2013/:
1/:
ANAR/
2/:
ANAR/
我打算做的是使用 os.walk() 遍历最里面的子目录(即 ANAR)并在其中创建一个类似的文件夹(如果它不存在)。这是我的代码:
for root,dirs,files in os.walk ('./2013/'):
for f in dirs:
if not f.isdigit():
path = os.path.join (root,f)
fullpath = f'{path}{os.path.sep}{f}'
if not os.path.isdir (fullpath):
os.mkdir (fullpath)
但我遇到以下错误(在 ./2013/2/ANAR/ 中创建了一堆 ANAR 目录):
OSError: [Errno 36] 文件名太长:'./2013/2/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR /ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR /ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR /ANAR/ANAR/ANAR/ ...
关于原因的任何想法?
解决方法
os.walk
不是您所需要的。您有一个固定的起始设置,并且您要创建的所有目录都在同一级别,因此使用这样的递归方法比所需的复杂得多……特别是因为您确实不应该同时修改子目录结构迭代它。
你可以用 os.listdir
做到这一点:
import os
root = '2013'
for entry in os.listdir(root):
path = os.path.join(root,entry)
if os.path.isdir(path):
os.mkdir(os.path.join(path,'ANAR','ANAR'))
但是您在评论中提到编号的文件夹是几个月。你会永远拥有这十二个吗?如果是这样,您甚至不需要遍历目录。
import os
for month in range(1,13):
os.mkdir(os.path.join('2013',str(month),'ANAR'))
无论哪种情况,我都建议使用 而不是 os
,因为它可以 pathlib
。特别是,它为您的操作系统处理正确的路径分隔符,您可以只使用正斜杠。
from pathlib import Path
for month in range(1,13):
Path(f'2013/{month}/ANAR/ANAR').mkdir()
或者,如果您可能有一个不完整的月份列表并且想要遍历文件夹:
from pathlib import Path
for entry in Path('2013').iterdir():
if entry.is_dir():
(entry / 'ANAR/ANAR').mkdir()
(请注意,/
运算符可以将字符串(或其他 Path 对象)连接到现有的 Pat 对象上。)
最后,如果其中一些 ANAR
子文件夹已经存在,这些都会抛出错误。如果有可能已经存在一些(也许您启动了脚本但不得不中止它?),使用 Path.mkdir(exist_ok=True)
将忽略此类错误并继续创建任何不存在的错误
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。