Python &引用;文件txt的子目录已存在。”;尝试对文件进行排序时出错,即使没有文件名;txt";
我试图制作一个python脚本,将所有具有特定扩展名的文件移动到各自的文件夹中,这些文件夹以扩展名命名,如TXT。但是,在运行代码时会出现错误“文件txt的子目录已经存在”。但是在查找包含需要排序的文件的文件夹后,甚至还没有创建具有此名称的文件Python &引用;文件txt的子目录已存在。”;尝试对文件进行排序时出错,即使没有文件名;txt";,python,shutil,Python,Shutil,我试图制作一个python脚本,将所有具有特定扩展名的文件移动到各自的文件夹中,这些文件夹以扩展名命名,如TXT。但是,在运行代码时会出现错误“文件txt的子目录已经存在”。但是在查找包含需要排序的文件的文件夹后,甚至还没有创建具有此名称的文件 导入操作系统 进口舒蒂尔 尝试: path=“/Users/name/Desktop/test2/” 对于os.walk(路径)中的(路径、目录、文件): 对于文件中的文件: 扩展名=file.split('.')[1] 打印(扩展) 如果os.path
导入操作系统
进口舒蒂尔
尝试:
path=“/Users/name/Desktop/test2/”
对于os.walk(路径)中的(路径、目录、文件):
对于文件中的文件:
扩展名=file.split('.')[1]
打印(扩展)
如果os.path.exists(r)/Users/name/Desktop/test2/“+扩展名):
如果文件.endswith(扩展名):
move(文件“/Users/name/Desktop/test2/”+扩展名)
其他:
操作系统('mkdir'+扩展名)
move(文件“/Users/name/Desktop/test2/”+扩展名)
除:
打印(“完成”)
看起来您是在工作目录中创建txt文件,而不是在path变量引用的目录中。每次引用文件名或目录名之前,都需要添加路径
import os
import shutil
try:
path = "/Users/name/Desktop/test2/"
for (path, dirs, files) in os.walk(path):
for file in files:
extension=file.split('.')[1]
print(extension)
if os.path.exists(path +extension):
print('not exist')
if file.endswith(extension):
print(file)
shutil.move(path + file, path +extension)
else:
print('exists')
print(file)
os.system('mkdir ' + path + extension)
shutil.move(path + file, path +extension)
except:
print("done")
请尝试以下操作:
import os
import shutil
try:
root = '/Users/name/Desktop/test2/'
for path, _, files in os.walk(root):
for file in files:
extension = file.split('.')[1]
path_ext = os.path.join(root, extension)
os.makedirs(path_ext, exist_ok=True)
path_file = os.path.join(path, file)
shutil.move(path_file, path_ext)
except:
print('done')
os.path.join()
是构造路径的更安全的方法。正如我在评论中提到的,我将使用os.makedirs()
创建路径。欢迎使用SO。只是一个小问题。对主路径使用不同的变量,如main\u path=“/Users/name/Desktop/test2/”
,主要是因为您将在for循环中覆盖该值。也就是说,请发布完整的回溯。我试过了,但还是出现了相同的错误,你说的完整回溯是什么意思?@CommandBlock错误消息以回溯开始(最近一次调用最后):…
@CommandBlock问题:为什么不使用os.makedir
创建新目录?是否os.system('mkdir'+扩展)
是个问题?在我看来,只有当cwd
是/Users/name/Desktop/test2/
时,它才像预期的那样工作?我尝试了这个,它似乎像预期的那样工作,但是,它没有创建文件夹,而是创建了一个“文件”,没有扩展名,什么都没有。我也无法访问此“文件”。这里的wpath
是什么?哦,对不起。我最初使用wpath作为用户设置的路径变量,这样它就不会被os.walk覆盖,但我删除了它,因为它是不必要的。这非常有效,但是.txt文件不会进入文件夹。@CommandBlock这很奇怪吗?它在我的小测试环境中工作,有几个扩展,包括txt.Works,非常有魅力!谢谢