Python move()仅适用于现有文件夹?

Python move()仅适用于现有文件夹?,python,operating-system,shutil,Python,Operating System,Shutil,我想使用shutil.move()函数将一些符合特定模式的文件移动到新创建的(python脚本内部)文件夹中,但该函数似乎只适用于现有文件夹 例如,我在文件夹“/test”中有“a.txt”、“b.txt”、“c.txt”,我想使用os.join()在python脚本中创建一个文件夹“/test/b”,并将所有.txt文件移动到文件夹“/test/b” 导入操作系统 进口舒蒂尔 导入glob files=[glob.glob('./*.txt')中的文件对应文件]#假设我们在'/test'中 对

我想使用shutil.move()函数将一些符合特定模式的文件移动到新创建的(python脚本内部)文件夹中,但该函数似乎只适用于现有文件夹

例如,我在文件夹“/test”中有“a.txt”、“b.txt”、“c.txt”,我想使用os.join()在python脚本中创建一个文件夹“/test/b”,并将所有.txt文件移动到文件夹“/test/b”

导入操作系统
进口舒蒂尔
导入glob
files=[glob.glob('./*.txt')中的文件对应文件]#假设我们在'/test'中
对于文件中的f:
shutil.move(f,'./b')#假设'./b'已经存在
#上述代码按预期工作,但以下代码不起作用:
导入操作系统
进口舒蒂尔
导入glob
new_dir='b'
父目录='。/'
path=os.path.join(父目录、新目录)
files=[glob.glob('./*.txt')中文件的文件]
对于文件中的f:
shutil.移动(f,路径)
#之后,我在“/test”中只得到了“b”,而“cd b”给出了:
#[Errno 20]不是目录:“b”

任何建议都将不胜感激

问题在于,创建目标路径变量名时:

path = os.path.join(parent_dir, new_dir)
路径不存在。因此
shutil.move
可以工作,但不像您期望的那样,而是像一个标准的
mv
命令:它将每个文件移动到名为“b”的父目录,覆盖每个旧文件,只留下最后一个(非常危险,因为有数据丢失的风险)

如果目录不存在,请首先创建该目录:

path = os.path.join(parent_dir, new_dir)
if not os.path.exists(path):
   os.mkdir(path)

现在
shutil.move
将在移动到
b
时创建文件,因为
b
是一个目录。

搁置:
[glob.glob('./*.txt')中的文件]
=>只需
glob.glob('./*.txt')
谢谢,它现在可以工作了。实际上,我在自己的项目中用os.mkdir(path)创建了一个新目录,但忘了在这个测试示例中编写它。我自己的项目中真正的问题是,我没有写“if not os.path.exists(path)”,而是写“if not path”,这总是错误的。