从循环中创建目录
我需要通过一个循环来创建文件夹。我有一个列表。
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
。