use*_*189 7 python operating-system shutil
我想使用 Shutil.move() 函数将一些与特定模式匹配的文件移动到新创建的(Python 脚本内)文件夹,但似乎该函数仅适用于现有文件夹。
例如,我在文件夹“/test”中有“a.txt”、“b.txt”、“c.txt”,我想使用 os.path 在我的 python 脚本中创建一个文件夹“/test/b”。 join() 并将所有 .txt 文件移动到文件夹“/test/b”
import os
import shutil
import glob
files = glob.glob('./*.txt') #assume that we in '/test'
for f in files:
shutil.move(f, './b') #assume that './b' already exists
#the above code works as expected, but the following not:
import os
import shutil
import glob
new_dir = 'b'
parent_dir = './'
path = os.path.join(parent_dir, new_dir)
files = glob.glob('./*.txt')
for f in files:
shutil.move(f, path)
#After that, I got only 'b' in '/test', and 'cd b' gives:
#[Errno 20] Not a directory: 'b'
Run Code Online (Sandbox Code Playgroud)
任何建议表示赞赏!
问题是当您创建目标路径变量名时:
path = os.path.join(parent_dir, new_dir)
Run Code Online (Sandbox Code Playgroud)
该路径不存在。所以shutil.move有效,但不像你期望的那样,而是像一个标准mv命令:它将每个文件移动到名为“b”的父目录,覆盖每个旧文件,只留下最后一个(非常危险,因为数据存在风险)损失)
如果目录不存在则先创建:
path = os.path.join(parent_dir, new_dir)
if not os.path.exists(path):
os.mkdir(path)
Run Code Online (Sandbox Code Playgroud)
现在shutil.move将在移动到时创建文件,b因为它b是一个目录。
| 归档时间: |
|
| 查看次数: |
11632 次 |
| 最近记录: |