如何使用 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
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