我试着用python创建一系列的文件夹和子文件夹,但是我就是做不到。我一直收到一个错误,我当前所在文件夹的文件夹是在同一个文件夹中创建的。我想不出该怎么把它弄清楚。
import os, sys, errno
all_dirs = {
'audio': ['Music', 'Audiobooks', 'Podcasts'],
'documents': ['Forms', 'Bills', 'Legal', 'Financial'],
'images': ['Photographs','Art', 'Friends', 'Family'],
'literature': ['Novels', 'Poetry', 'Short Stories'],
'software': ['Apps', 'Games'],
'videos': ['TV Series', 'Movies', 'Documentaries']
}
def create_dirr(curr_dirr, dirs_to_create):
if not os.path.exists(curr_dirr):
try:
os.makedirs(curr_dirr)
except OSError as exc: # Guard against race condition
if exc.errno != errno.EEXIST:
raise
else:
print 2, os.getcwd()
for dirr in dirs_to_create:
print 2.5, dirr, os.getcwd()
os.path.join(os.getcwd(), curr_dirr)
print 2.7, os.getcwd(), os.path.join(os.getcwd(), dirr)
os.chdir(os.path.join(os.getcwd(), curr_dirr))
# os.path.join(ff, dirr)
print 2.8, os.getcwd()
# os.makedirs(dirr)
# os.chdir(os.path.join(os.getcwd(), curr_dirr))
print 2.9, dirr, os.getcwd()
vv = os.path.join(os.getcwd(), dirr)
print 3, dirr, os.getcwd()
print 4, os.path.exists(dirr)
print 5, vv
print 7, dirr, os.getcwd()
print '------------------------------------'
if not os.path.exists(vv):
print "here"
try:
print 6, vv
# os.makedirs(vv)
except OSError as exc: # Guard against race condition
if exc.errno != errno.EEXIST:
raise
for x in all_dirs:
create_dirr(x, all_dirs[x])
create_dirr(x, all_dirs[x])
以下是输出和错误代码:
2 /home/runner
2.5 Forms /home/runner
2.7 /home/runner /home/runner/Forms
2.8 /home/runner/documents
2.9 Forms /home/runner/documents
3 Forms /home/runner/documents
4 False
5 /home/runner/documents/Forms
7 Forms /home/runner/documents
------------------------------------
here
6 /home/runner/documents/Forms
2.5 Bills /home/runner/documents
2.7 /home/runner/documents /home/runner/documents/Bills
Traceback (most recent call last):
File "python", line 130, in <module>
File "python", line 104, in create_dirr
OSError: [Errno 2] No such file or directory: '/home/runner/documents/documents'
发布于 2018-06-09 06:21:42
我想通了。
首先,我在循环之前为os.getcwd()
创建了一个变量。然后,我在os.path.join
中结合了curr_dirr
和dirr
。我还删除了os.chdir()
。
结果:
def create_dirr(curr_dirr, dirs_to_create):
if not os.path.exists(curr_dirr):
try:
os.makedirs(curr_dirr)
except OSError as exc: # Guard against race condition
if exc.errno != errno.EEXIST:
raise
else:
print 2, os.getcwd()
cd = os.getcwd()
for dirr in dirs_to_create:
print 2.5, dirr, os.getcwd(), os.path.join(cd, curr_dirr)
print 2.7, os.path.join(cd, curr_dirr, dirr)
print 2.8, cd
print 3, dirr, cd
print '------------------------------------'
if not os.path.exists(os.path.join(cd, curr_dirr, dirr)):
print "here"
try:
print 6, os.path.join(cd, curr_dirr, dirr)
os.makedirs(os.path.join(cd, curr_dirr, dirr))
except OSError as exc: # Guard against race condition
if exc.errno != errno.EEXIST:
raise
使用这个snippet来布局文件结构,我能够看到它是如何工作的。
for root, dirs, files in os.walk("."):
path = root.split(os.sep)
print((len(path) - 1) * '---', os.path.basename(root))
for file in files:
print(len(path) * '---', file)
发布于 2018-06-08 05:31:08
当你创建os.chdir
时,你还没有创建子文件夹。轻松修复
在生成os.chdir
之前,请执行以下操作:
os.makedirs(os.path.join(os.getcwd(), curr_dirr), exist_ok=True)
https://stackoverflow.com/questions/50750336
复制相似问题