How to move a file in Python
我查看了python
1 2 3 | >>> source_files = '/PATH/TO/FOLDER/*' >>> destination_folder = 'PATH/TO/FOLDER' >>> # equivalent of $ mv source_files destination_folder |
两者使用相同的语法:
1 2 3 4 5 | import os import shutil os.rename("path/to/current/file.foo","path/to/new/destination/for/file.foo") shutil.move("path/to/current/file.foo","path/to/new/destination/for/file.foo") |
请注意,在这两种情况下,创建新文件的目录都必须已经存在(但是,在Windows上,具有该名称的文件必须不存在,否则将引发异常)。另外,您必须在源和目标参数中包含文件名(
正如对其他答案的评论所指出的那样,在大多数情况下,
虽然
对于os.rename或shutil.move,您需要导入模块。不需要*字符来移动所有文件。
我们在/opt/awome有一个名为source的文件夹,其中有一个名为awome.txt的文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 | in /opt/awesome ○ → ls source ○ → ls source awesome.txt python >>> source = '/opt/awesome/source' >>> destination = '/opt/awesome/destination' >>> import os >>> os.rename(source, destination) >>> os.listdir('/opt/awesome') ['destination'] |
我们使用os.listdir来查看文件夹名称是否发生了变化。这是把目的地移回源头的航天飞机。
1 2 3 4 | >>> import shutil >>> shutil.move(destination, source) >>> os.listdir('/opt/awesome/source') ['awesome.txt'] |
这次我检查了源文件夹,以确保我创建的awesome.txt文件存在。它在那里:
现在,我们已经将一个文件夹及其文件从源位置移到目标位置,然后再移回来。
接受的答案不是正确的答案,因为问题不是将文件重命名为文件,而是将许多文件移动到一个目录中。
这是我目前正在使用的:
1 2 3 4 5 6 7 8 9 | import os, shutil path ="/volume1/Users/Transfer/" moveto ="/volume1/Users/Drive_Transfer/" files = os.listdir(path) files.sort() for f in files: src = path+f dst = moveto+f shutil.move(src,dst) |
现在功能齐全。希望这对你有帮助。
编辑:我把它变成了一个函数,它接受一个源目录和目标目录,如果目标文件夹不存在,就创建它,并移动文件。还允许过滤SRC文件,例如,如果您只想移动图像,那么使用模式
1 2 3 4 5 6 7 | import os, shutil, pathlib, fnmatch def move_dir(src: str, dst: str, pattern: str = '*'): if not os.path.isdir(dst): pathlib.Path(dst).mkdir(parents=True, exist_ok=True) for f in fnmatch.filter(os.listdir(src), pattern): shutil.move(os.path.join(src, f), os.path.join(dst, f)) |
在python 3.4之后,还可以使用
https://docs.python.org/3.4/library/pathlib.html pathlib.path.rename
根据这里描述的答案,使用
像这样:
1 | subprocess.call("mv %s %s" % (source_files, destination_folder), shell=True) |
与
是否依赖于系统?
这是一种解决方案,它不支持使用
1 2 3 4 5 6 7 8 9 10 | import subprocess source = 'pathToCurrent/file.foo' destination = 'pathToNew/file.foo' p = subprocess.Popen(['mv', source, destination], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) res = p.communicate()[0].decode('utf-8').strip() if p.returncode: print 'ERROR: ' + res |
1 2 3 4 5 6 7 8 9 10 11 12 | import os,shutil current_path ="" ## source path new_path ="" ## destination path os.chdir(current_path) for files in os.listdir(): os.rename(files, new_path+'{}'.format(f)) shutil.move(files, new_path+'{}'.format(f)) ## to move files from |
不同的磁盘,例如C:->D: