我的目标是使用另一个研究人员给我的代码。我在Windows10上使用Python3.7,我假设代码是为Python2和Linux OS编写的。
我需要将一些旧的Python2命令转换为我的新3.7版本。我不能使用其他Python版本,也不能更改我的操作系统。我已经开始了这项工作,一些翻译是相当明显的,但我需要你的帮助。
旧的命令是:
subprocess.call(["cp", "-r", WD + "Albedo", WD + "CIE_data",
WD + "Gases", WD + "Solar", ProcessDir[ProcessNumber]])WD和ProcessDir[ProcessNumber]都是文件路径。
我需要一个适用于Windows3.7的新命令。我假设"cp -r"等同于Windows命令xcopy,但我的问题是:WD + "Albedo"、+ "CIE_data"等。如何使用subprocess.call在一个命令中xcopy多个文件
发布于 2019-01-11 01:27:21
坦率地说,当Python的shutil模块为您提供了一种独立于操作系统的复制目录树的方法时,就没有理由使用任何操作系统提供的工具来实现这一点。因此:
import shutil, os.path
for subdir in ['Albedo' 'CIE_data' 'Gases', 'Solar']:
shutil.copytree(os.path.join(WD, subdir),
os.path.join(ProcessDir[ProcessNumber], subdir))发布于 2019-01-11 01:32:08
我强烈建议不要复制这样的文件。正如您在当前情况下看到的那样,不能保证在不同的计算机上使用相同的程序。另一方面,您可以使用Python,它具有您可能需要的所有跨平台文件复制实用程序。
对于一般的文件操作,shutil模块是最好的选择。特别是,shutil.copytree几乎完全符合您的要求。唯一的区别是目标可能还不存在,并且您必须一次复制一个源文件夹。
另一点是,您通常不希望将可能包含或不包含尾随斜杠的路径与+连接在一起。请改用os.join。它不仅会处理这些差异,还会确保它插入的路径分隔符对于您的操作系统是正确的。
总而言之,您拥有:
from shutil import copytree
from os.path import join
for folder in ('Albedo', 'CIE Data', 'Gasses', 'Solar'):
copytree(join(WD, folder), join(ProcessDir[ProcessNumber], folder))如果在此过程中出现问题,您可能需要使用shutil.rmtree预先清理输出。调用copytree之前,请执行以下操作
rmtree(join(ProcessDir[ProcessNumber], folder), ignore_errors=True)https://stackoverflow.com/questions/54133753
复制相似问题