Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python &引用;文件txt的子目录已存在。”;尝试对文件进行排序时出错,即使没有文件名;txt";_Python_Shutil - Fatal编程技术网

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

我试图制作一个python脚本,将所有具有特定扩展名的文件移动到各自的文件夹中,这些文件夹以扩展名命名,如TXT。但是,在运行代码时会出现错误“文件txt的子目录已经存在”。但是在查找包含需要排序的文件的文件夹后,甚至还没有创建具有此名称的文件

导入操作系统
进口舒蒂尔
尝试:
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,非常有魅力!谢谢