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

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

当前回答

对于任意一个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文件存在。它就在那里:)

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

其他回答

  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:

对于任意一个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文件存在。它就在那里:)

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

也可以使用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.rename()和shutil.move()都将重命名文件,但最接近Unix mv命令的命令是shutil.move()。不同之处在于,如果源文件和目标文件在不同的磁盘上,os.rename()将不起作用,而shutil.move()是文件与磁盘无关的。

这是解决方案,它不启用shell使用mv。

from subprocess import Popen, PIPE, STDOUT

source = "path/to/current/file.foo", 
destination = "path/to/new/destination/for/file.foo"

p = Popen(["mv", "-v", source, destination], stdout=PIPE, stderr=STDOUT)
output, _ = p.communicate()
output = output.strip().decode("utf-8")
if p.returncode:
    print(f"E: {output}")
else:
    print(output)