小编Cat*_*lin的帖子

如何在 Python 中为需要文件名的函数提供 URL

我正在寻找一个通用配方,以将 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)
Run Code Online (Sandbox Code Playgroud)

这可行,而且看起来不太糟糕,但我必须进行大量实验才能找到它,因为由于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))
Run Code Online (Sandbox Code Playgroud)

甚至这个:

def as_file(url):
    tfile = tempfile.NamedTemporaryFile()
    tfile.write(requests.get(url).content)
    return tfile

gpd.read_file(as_file(URL).name)
Run Code Online (Sandbox Code Playgroud)

有没有更明显、更容易记住、更安全的方式?

python url filenames arguments

5
推荐指数
1
解决办法
1226
查看次数

CUBE + 外连接 = 额外的 NULL 行

当我在带有 OUTER JOIN 的查询上使用 PostgreSQL 的CUBE时,我得到一个额外的全 NULL 行,该行无法与多维数据集自己的“所有内容组合”的全 NULL 结果区分开来。

CREATE TABLE species
  ( id    SERIAL PRIMARY KEY,
    name  TEXT);

CREATE TABLE pet
  ( species_id INTEGER REFERENCES species(id),
    is_adult   BOOLEAN, 
    number     INTEGER)
;

INSERT INTO species VALUES
  (1, 'cat'), (2, 'dog');

INSERT INTO pet VALUES
  (1, true, 3), (1, false, 1), (2, true, 1), (null, true, 2);
Run Code Online (Sandbox Code Playgroud)

好的,总共有 7 只宠物:

SELECT SUM(number) FROM pet;
 sum
-----
   7
(1 row)
Run Code Online (Sandbox Code Playgroud)

现在看看立方体的总行数:

SELECT * FROM (
        SELECT name, is_adult, SUM(number) …
Run Code Online (Sandbox Code Playgroud)

sql postgresql rolap cube outer-join

3
推荐指数
1
解决办法
581
查看次数

标签 统计

arguments ×1

cube ×1

filenames ×1

outer-join ×1

postgresql ×1

python ×1

rolap ×1

sql ×1

url ×1