我有一个设计问题。我有一个函数loadImage()用于加载图像文件。现在它接受一个文件路径的字符串。但我也希望能够加载不在物理磁盘上的文件,例如。程序生成。我可以让它接受一个字符串,但那么它怎么知道字符串不是文件路径而是文件数据?我可以添加一个额外的布尔参数来指定,但这听起来不是很干净。有任何想法吗? 现在就是这样的:
def loadImage(filepath):
file = open(filepath, 'rb')
data = file.read()
# do stuff with data
另一个版本是
def loadImage(data):
# do stuff with data
如何让这个函数同时接受'filepath'或'data'并猜测它是什么?
答案 0 :(得分:3)
您可以更改loadImage
函数以期望打开的文件类对象,例如:
def load_image(f):
data = file.read()
...然后从两个函数调用,其中一个函数需要一个路径,另一个函数包含数据:
from StringIO import StringIO
def load_image_from_path(path):
with open(path, 'rb') as f:
load_image(f)
def load_image_from_string(s):
sio = StringIO(s)
try:
load_image(sio)
finally:
sio.close()
答案 1 :(得分:0)
如何创建两个函数loadImageFromString
和loadImageFromFile
?
答案 2 :(得分:0)
这是Python,您可以轻松区分文件名和数据字符串。我会做这样的事情:
import os.path as P
from StringIO import StringIO
def load_image(im):
fin = None
if P.isfile(im):
fin = open(im, 'rb')
else:
fin = StringIO(im)
# Read from fin like you would from any open file object
其他方法是try
阻止而不是使用os.path
,但方法的本质保持不变。