我怎么能在Python中做mv src/* dest/的等效?

>>> source_files = '/PATH/TO/FOLDER/*'
>>> destination_folder = 'PATH/TO/FOLDER'
>>> # equivalent of $ mv source_files destination_folder

当前回答

在Python 3.4之后,你也可以使用pathlib的类Path来移动文件。

from pathlib import Path

Path("path/to/current/file.foo").rename("path/to/new/destination/for/file.foo")

https://docs.python.org/3.4/library/pathlib.html#pathlib.Path.rename

其他回答

在Python 3.4之后,你也可以使用pathlib的类Path来移动文件。

from pathlib import Path

Path("path/to/current/file.foo").rename("path/to/new/destination/for/file.foo")

https://docs.python.org/3.4/library/pathlib.html#pathlib.Path.rename

这是我现在用的:

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文件,例如,如果你只想移动图像,那么你使用'*.jpg'模式,默认情况下,它会移动目录中的所有内容

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))

Os.rename (), os.replace()或shutil.move()

它们都使用相同的语法:

import os
import shutil

os.rename("path/to/current/file.foo", "path/to/new/destination/for/file.foo")
os.replace("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")

注意,必须在源和目标参数中都包含文件名(file.foo)。如果它被更改,文件将被重命名并移动。

还要注意,在前两种情况下,创建新文件的目录必须已经存在。在Windows上,具有该名称的文件必须不存在,否则将引发异常,但os.replace()即使在这种情况下也会无声地替换文件。

正如在其他答案的评论中所指出的,shutil。Move只是调用os。在大多数情况下重命名。但是,如果目标文件位于与源文件不同的磁盘上,则会复制源文件,然后删除源文件。

也可以使用subprocess.run()方法。

python:
>>> import subprocess
>>> new = "/path/to/destination"
>>> old = "/path/to/new/destination"
>>> process = "mv ..{} ..{}".format(old,new)
>>> subprocess.run(process, shell=True) # do not remember, assign shell value to True.

这在Linux上工作时可以很好地工作。Windows可能会报错,因为没有mv命令。

对于任意一个os。重命名或shutil。移动您将需要导入的模块。 不需要*字符来移动所有文件。

我们在/opt/awesome有一个名为source的文件夹,其中一个文件名为awesome.txt。

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。可以看到文件夹名称实际上发生了更改。 这是将目的地移回原点的梭。

>>> import shutil
>>> source = '/opt/awesome/destination' 
>>> destination = '/opt/awesome/source'
>>> shutil.move(source, destination)
>>> os.listdir('/opt/awesome/source')
['awesome.txt']

这一次,我检查了源文件夹,以确保我创建的awesome.txt文件存在。它就在那里:)

现在,我们已经将一个文件夹及其文件从源移动到目标,然后再移动回来。