从循环中创建目录

0 投票
2 回答
839 浏览
提问于 2025-04-18 03:37

我需要通过一个循环来创建文件夹。我有一个列表。

a = [banana 1234, apple 456, orange 789]

我需要创建的文件夹名字是列表中以数字结尾的那些数字。例如。

C:\folder\1234; C:\folder\456

等等。

代码是

for length in atrinkta:
folder = re.findall(r'\d{9,}', length)
os.makedirs("D:/python_study/images/skelbimai/" + folder)

但是我遇到了一个错误“TypeError: cannot concatenate 'str' and 'list' objects”,我不知道该怎么办。请大家帮帮我。

编辑

我第二次尝试了你们的方法。在删除了创建的文件夹后,不管出于什么原因,Python给了我一个错误。

WindowsError: [Error 183] Cannot create a file when that file already exists: 'D:/python_study/images/skelbimai/'

第二次编辑

shaktimaan,现在我又遇到了另一个错误AttributeError: 'NoneType' object has no attribute 'group'。这是什么意思呢?

2 个回答

0

试试这个

for length in atrinkta:
    folder = re.search(r'(\d+)', length)
    os.makedirs("D:/python_study/images/skelbimai/" + folder.groups()[0])
0

这就是你想要的内容:

>>> import re
>>> pattern = re.compile(r'\d+')
>>> a = ['banana 1234', 'apple 456', 'orange 789']
>>> for item in a:
...     dir_name = 'D:/python_study/images/skelbimai/{}'.format(re.search(pattern, item).group(0))
...     if not os.path.isdir(dir_name):
...         os.mkdir(dir_name)

它的工作原理是这样的:这个正则表达式会在列表中的每个元素里找到数字。你可以通过以下方式来检查:

>>> import re
>>> pattern = re.compile(r'\d+')
>>> a = ['banana 1234', 'apple 456', 'orange 789']
>>> for item in a:
...     print re.search(pattern, item).group(0)
...
'1234'
'456'
'789'

你只需要把你的基础目录和上面计算出来的每个数字连接起来,然后对每个连接的结果调用 os.mkdir。因为你是在循环中创建目录,所以不需要使用 makedirs

撰写回答