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

时间:2017-09-12 20:45:11

标签: python-2.7 temporary-files shutil

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输出是"路径"

在python 2中 file_path输出是"无" 那么如何在临时目录中获取新文件的路径

1 个答案:

答案 0 :(得分:1)

shutil附带源代码,因此您可以查看python 3版本并进行修改。

如果比较Python 2.7&的shutil.copy2方法。 3.4,您将注意到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