Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用os.walk()在根目录中的子目录上循环?_Python_Os.walk - Fatal编程技术网

Python 如何使用os.walk()在根目录中的子目录上循环?

Python 如何使用os.walk()在根目录中的子目录上循环?,python,os.walk,Python,Os.walk,我有一个名为“2013”的根目录,其中有些子目录如下: 2013/: 1/: ANAR/ 2/: ANAR/ 我打算使用os.walk()遍历最里面的子目录(即ANAR),并在其中创建一个类似的文件夹(如果它还不存在的话)。这是我的密码: for root, dirs, files in os.walk ('./2013/'): for f in dirs: if not f.isdigit(): pat

我有一个名为“2013”的根目录,其中有些子目录如下:

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 dir):

错误:[错误号36]文件名太长:2013/2013/2/2013/2/2013/2/2013/2/2/2/2/2013/2/2/2013/2/2013/2/2/2/2013/2/2013/2/2/2/2/2/2/2/2/2/2/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/ANAR/2013/2013/2013/2013/2013/2013/2/2013/2/2/2/2/2/2/2/2/2/2/2/2/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阿纳尔/阿纳尔/阿纳尔/阿纳尔/阿纳尔/阿纳尔/阿纳尔/


关于原因有什么想法吗?

os.walk
不是您需要的。您有一个固定的启动设置,并且您想要创建的所有目录都在同一级别上,因此使用这样的递归方法要比需要的复杂得多。。。特别是因为在迭代子目录结构时,不应该修改它

您可以使用
os.listdir

导入操作系统
根='2013'
对于os.listdir(根目录)中的条目:
path=os.path.join(根,条目)
如果os.path.isdir(路径):
mkdir(os.path.join(路径'ANAR','ANAR'))
但是你在评论中提到编号的文件夹是个月。你总是要12个吗?如果是这样,您甚至不需要遍历目录

导入操作系统
对于范围(1,13)内的月份:
os.mkdir(os.path.join('2013',str(月),'ANAR','ANAR'))
不管是哪种情况,我都建议尽可能使用over
os
。特别是,它为您的操作系统处理正确的路径分隔符,您可以只使用正斜杠

从pathlib导入路径
对于范围(1,13)内的月份:
路径(f'2013/{month}/ANAR/ANAR').mkdir()
或者,如果您可能有一个不完整的月份列表,并希望遍历文件夹:

从pathlib导入路径
对于路径('2013')中的条目。iterdir():
如果条目.is_dir():
(条目/‘ANAR/ANAR’).mkdir()
(请注意,
/
操作符可以将字符串(或其他路径对象)连接到现有Pat对象上。)


最后,如果其中一些
ANAR
子文件夹已经存在,则这两个文件夹都会引发错误。如果可能的话,某些错误可能已经存在(可能是您启动了脚本,但不得不中止它?),使用
Path.mkdir(exist\u ok=True)
将忽略这些错误,并继续创建任何尚未存在的错误。

尝试使用
pathlib
替代,以获得更好的实现[.在遍历子目录时不要创建子目录。您能否确切地说明您正在寻找的最终状态,以及初始结构如何变化?例如,您是否只希望在根目录之前创建两个级别的子目录,或者某些目录是否可以更嵌套?是否应该创建每个不是数字且不是数字的文件夹是否包含在同名文件夹中?是否包含同名子文件夹?@CrazyChucky初始结构严格,没有任何更改(年/月/站/)。是的,我要构建的目录正好位于根目录下2级的每个子目录中,不需要更多嵌套目录。一行子目录的当前状态为./2013/1/ANAR,我想将其设置为./2013/1/ANAR/ANARThanks,以供参考。它们都很有用