用于在磁盘上加载字符串和文件的函数?

时间:2011-10-16 05:57:12

标签: python string file arguments

我有一个设计问题。我有一个函数loadImage()用于加载图像文件。现在它接受一个文件路径的字符串。但我也希望能够加载不在物理磁盘上的文件,例如。程序生成。我可以让它接受一个字符串,但那么它怎么知道字符串不是文件路径而是文件数据?我可以添加一个额外的布尔参数来指定,但这听起来不是很干净。有任何想法吗? 现在就是这样的:

def loadImage(filepath):
    file = open(filepath, 'rb')
    data = file.read()
    # do stuff with data

另一个版本是

def loadImage(data):
    # do stuff with data

如何让这个函数同时接受'filepath'或'data'并猜测它是什么?

3 个答案:

答案 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)

如何创建两个函数loadImageFromStringloadImageFromFile

答案 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,但方法的本质保持不变。