簡體   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