我正在尋找一種通用的方法來爲需要文件名的函數使用URL。我對此感到困惑,但它有點複雜,容易出錯。如何在Python中提供需要文件名的函數的URL
在這種情況下,我的功能是read_file
從geopandas
,但它在任何情況下都是同樣的問題。
import tempfile, requests
import geopandas as gpd
def as_file(url):
tfile = tempfile.NamedTemporaryFile()
tfile.write(requests.get(url).content)
return tfile
URL = 'https://raw.githubusercontent.com/bowmanmc/ohiorepresents/master/data/congressional.min.json'
tf = as_file(URL)
gpd.read_file(tf.name)
這樣的作品,並沒有看太可怕了,但我不得不嘗試一堆找到它,因爲輕微的變種提高OSError: no such file or directory
,由於臨時文件的壽命;但我也不想用永久文件混淆文件系統。
這種失敗:
def as_file(url):
tfile = tempfile.NamedTemporaryFile()
tfile.write(requests.get(url).content)
return tfile.name
gpd.read_file(as_file(URL))
即使這樣:
def as_file(url):
tfile = tempfile.NamedTemporaryFile()
tfile.write(requests.get(url).content)
return tfile
gpd.read_file(as_file(URL).name)
有一個比較明顯的,令人難忘的,還是防彈的方式?
你可以使用['contextlib.contextmanager'(https://docs.python.org/2/library/contextlib.html#contextlib.contextmanager)和「機智」 h'。對不起,沒時間提供更好的答案。 –