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

2024-04-18 16:11:29 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

另一个版本是

def loadImage(data):
    # do stuff with data

如何让这个函数同时接受“filepath”或“data”并猜测它是什么?你知道吗


Tags: 文件函数字符串路径datadef图像文件with
3条回答

创建两个函数loadImageFromStringloadImageFromFile怎么样?你知道吗

您可以将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()

由于是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,但方法的本质是相同的。你知道吗

相关问题 更多 >