我怎么知道我是否有一个类似文件的对象?

2024-05-16 14:42:15 发布

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

我想要一个函数,可以将数据写入文件:

def data_writer(data, file_name):
    spiffy_data = data # ...
    with open(file_name, 'w') as out:
        out.write(spiffy_data)

但有时,我有一个文件对象而不是文件名。在本例中,我有时有一个tempfile.TemporaryFile(它创建了一个类似文件的可写对象)。你知道吗

我想写一些东西,比如:

def data_writer(data, file_thing):
    spiffy_data = data # ...
    if type(file_thing) is file_like:
        file_thing.write(spiffy_data)
    else:
        with open(file_name, 'w') as out:
            out.write(spiffy_data)

有什么好办法?你知道吗

另外,在Python中这样做有意义吗?你知道吗


Tags: 文件对象函数namedatadefaswith
2条回答

一个函数应该做一件事,并且把这件事做好。在data_writer的情况下,一件事就是将数据写入类似文件的对象。让调用者担心提供这样的对象。也就是说,您还可以以包装器的形式提供调用程序,该包装器采用文件名并为data_writer打开它。你知道吗

def data_writer(data, file_obj):
    spiffy_data = data # ...
    file_obj.write(spiffy_data)

def write_data_to_file(data, file_name):
    with open(file_name, "w") as f:
        data_writer(f, file_name)

虽然您的方法是^{},但假设它是^{}是pythonic。所以你可以try

  • write()到您收到的file_thing
  • open()

except一个潜在的异常,取决于您感觉更好的是代表默认情况。你知道吗

编辑:CfShadowRanger's comment了解为什么将异常处理与上下文管理器混合在一起是相当不合法的。你知道吗

相关问题 更多 >