【发布时间】:2019-08-20 07:08:11
【问题描述】:
我需要在我的程序中执行以下操作:
a) 要求用户输入要在我的目录中创建的文件夹的名称 b) 创建文件夹 c) 生成文件夹内的文件
要生成的文件是使用 REGEX 从书中提取的不同文本。我希望程序循环遍历 REGEX 匹配项并自动将每个匹配项放入一个文件中(每个文本都匹配到一个文件中)。这些文本文件需要存储在用户命名的这个新创建的文件夹中。
我的程序创建了文件夹,但只有第一个文本被写入了这个新文件夹内的文件。似乎错误在循环中。警告信息是:
Chapter1.txt Traceback(最近一次调用最后一次):文件 "/Users/nataliaresende/Dropbox/PYTHON/word_concatenator_final.py", 第 375 行,在 菜单()文件“/Users/nataliaresende/Dropbox/PYTHON/word_concatenator_final.py”, 第 365 行,在菜单中 单独的章节()文件“/Users/nataliaresende/Dropbox/PYTHON/word_concatenator_final.py”, 第 224 行,在单独的章节中 os.makedirs(文件夹)文件“/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/os.py”, 第 221 行,在 makedirs 中 mkdir(name, mode) FileExistsError: [Errno 17] 文件存在:'/Users/nataliaresende/Dropbox/PYTHON/folder'
有人知道发生了什么吗?也许是身份?
us=input('\n\nEnter the name of the book or file: ')
pat = re.compile(r'(?<=\[@CHAPST@\]).+?(?=\[@CHAPFN@\])')
my_chapters=[]
with open(us, 'r', encoding="utf-8") as file:
for i in pat.findall(file.read()):
my_chapters.append(i)
print('\n\nThis book contains',len(my_chapters), 'chapters')
user2=input('\n\nWrite chapters to a file? | Y/N: ')
if user2 =='Y':
folder_name=input("Name your folder. E.g. 'Texts': ")
folder=os.path.join('/Users/nataliaresende/Dropbox/PYTHON/', folder_name)
os.makedirs(folder)
for j in range(len(my_chapters)):
chap='Chapter'+str(j+1) +'.txt'.format(folder_name)
file = os.path.join(folder, chap)
with open(file, "w") as f:
for item in my_chapters[j]:
f.write("%s" % str(item))
print('\n\n', chap)
print('\n\nChapters 1 -',len(my_chapters), 'written to a file separately. Check your folder named "Chapters" in your directory')
【问题讨论】:
-
os.makedirs(folder)您尝试多次创建同一个文件夹。将其移出循环并使用exist_ok参数。 -
@JohnnyMopp,好的!我移动了 os.makedirs(folder) 并且还更新了代码。你能告诉我exist_ok参数吗?也许更新我的代码?
-
os.makedirs(folder, exist_ok=True)另请注意,如果user2 != 'Y',folder和folder_name变量将是未定义的。 -
我还要添加什么:继续循环?