繁体   English   中英

如何判断我是否有类似文件的对象?

[英]How can I tell if I have a file-like object?

我想要一个将数据写入文件的功能:

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做有意义吗?

一个函数应该做一件事,并且做好一件事。 对于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)

虽然你的做法是LBYL ,这是Python的假设是EAFP 所以你可以try

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

except可能的例外情况以外,取决于您感觉更好的情况代表默认情况。

编辑: Cf ShadowRanger的注释 ,为什么在这里将异常处理与上下文管理器混合起来是很模糊的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM