如何使用 shutil.copy 获取输出文件路径

how to get output file path with shutil.copy

import tempfile
import shutil

temp_ =  tempfile.mkdtemp()
class ListView_(Screen):
    def Image_(self, path):
        global image_file_path
        file_path = shutil.copy2(path[0], temp_)

在 python 3 file_path 输出是 "path"

在 python 2 file_path 输出为 "None" 那么如何在临时目录

中获取新文件的路径

shutil自带源码,大家可以看看python3版本适配。

如果比较 Python 2.7 和 3.4 的 shutil.copy2 方法,您会注意到 3.4 版本中有一个新的 return dst。这是添加的新功能,python 2.

中没有

shutil.copy2 方法中对您来说有趣的行是:

if os.path.isdir(dst):
    dst = os.path.join(dst, os.path.basename(src))

表示如果temp_是一个目录,那么target就是源的目录/basename,否则保持原样,所以在这段代码之后,dst总是一个目标文件名称,open(dst,"wb') 将起作用。

因此,为了使您的代码与 python 2 和 3 兼容(如果可能,这是一件好事),您可以通过使用三元表达式计算实际文件路径目标来模拟它,然后使用它直接在 shutil 中(为什么要再次传递目录?):

file_path = os.path.join(_temp, os.path.basename(src)) if os.path.isdir(temp_) else temp_
shutil.copy2(path[0], file_path)  # ignore return code