【问题标题】:Passing a variable in url?在url中传递变量?
【发布时间】:2012-06-21 05:07:56
【问题描述】:

所以我是 python 新手,我迫切需要帮助。

我有一个文件,其中有一堆 ids(整数值)写在 em 中。它是一个文本文件。

现在我需要将文件中的每个 id 传递到一个 url。

例如“https://example.com/[id]”

会这样做

A = json.load(urllib.urlopen("https://example.com/(the first id present in the text file)"))
print A

这实质上会读取有关上述 url 中存在的 id 的某些信息并显示它。我希望它以循环格式工作,其中它将读取文本文件中的所有 id 并将其传递给“A”中提到的 url 并连续显示值..有没有办法做到这一点?

如果有人可以帮助我,我将不胜感激!

【问题讨论】:

    标签: python json url urllib urlopen


    【解决方案1】:

    可以使用旧式字符串连接

    >>> id = "3333333"
    >>> url = "https://example.com/%s" % id
    >>> print url
    https://example.com/3333333
    >>> 
    

    新样式字符串格式化:

    >>> url = "https://example.com/{0}".format(id)
    >>> print url
    https://example.com/3333333
    >>> 
    

    avasal 提到的对文件的读取有一个小的变化:

    f = open('file.txt', 'r')
    for line in f.readlines():
        id = line.strip('\n')
        url = "https://example.com/{0}".format(id)
        urlobj = urllib.urlopen(url)
        try:
            json_data = json.loads(urlobj)
            print json_data
        except:
            print urlobj.readlines()
    

    【讨论】:

    • 非常感谢您帮助我。我现在面临一个新问题。假设我尝试读取一个文本文件,说只有少数 id,它在执行时没有问题。但是我从中读取ID的文本文件有很多。并且代码无法执行。这是什么原因?有没有办法解决这个问题?
    • @user1452759:您遇到什么错误?从那里开始会很好。即使您有很多 id,该解决方案也应该适用。可能并非所有 url 获取都返回可以加载到 json 中的数据
    • @user1452759:尝试我在编辑示例中提到的解决方案。它将检查数据是否可以作为 json 加载,否则将打印所获取内容的输出。
    【解决方案2】:

    懒惰的风格:

    url = "https://example.com/" + first_id
    
    A = json.load(urllib.urlopen(url))
    print A
    

    旧式:

    url = "https://example.com/%s" % first_id
    
    A = json.load(urllib.urlopen(url))
    print A
    

    新风格 2.6+:

    url = "https://example.com/{0}".format( first_id )
    
    A = json.load(urllib.urlopen(url))
    print A
    

    新风格 2.7+:

    url = "https://example.com/{}".format( first_id )
    
    A = json.load(urllib.urlopen(url))
    print A
    

    【讨论】:

      【解决方案3】:

      您需要做的第一件事是知道如何从文件中读取每一行。首先,您必须打开文件;你可以通过with 声明来做到这一点:

      with open('my-file-name.txt') as intfile:
      

      这会打开一个文件并将对该文件的引用存储在intfile 中,它会在with 块的末尾自动关闭该文件。然后,您需要从文件中读取每一行;您可以使用常规的旧 for 循环来做到这一点:

        for line in intfile:
      

      这将遍历文件中的每一行,一次读取一行。在您的循环中,您可以使用line 访问每一行。剩下的就是使用您提供的代码向您的网站发出请求。您缺少的一点是所谓的“字符串插值”,它允许您使用其他字符串、数字或其他任何内容来格式化字符串。在您的情况下,您想将一个字符串(文件中的行)放在另一个字符串(URL)中。为此,您可以使用%s 标志以及字符串插值运算符%

      url = 'http://example.com/?id=%s' % line
      A = json.load(urllib.urlopen(url))
      print A
      

      把它们放在一起,你会得到:

      with open('my-file-name.txt') as intfile:
        for line in intfile:
          url = 'http://example.com/?id=%s' % line
          A = json.load(urllib.urlopen(url))
          print A
      

      【讨论】:

      • 非常感谢您帮助我。我现在面临一个新问题。假设我尝试读取一个文本文件,说只有少数 id,它在执行时没有问题。但是我从中读取ID的文本文件有很多。并且代码无法执行。这是什么原因?有没有办法解决这个问题?
      • 你能发布错误信息吗?很难说不知道问题是什么。
      【解决方案4】:

      Python 3+

      Python 3 支持新的字符串格式化,这是一种更易读、更好的格式化字符串的方法。 这是一篇同样值得阅读的好文章:Python 3's f-Strings

      在这种情况下,可以格式化为

      url = f"https://example.com/{id}"

      详细示例

      当您想将多个参数传递给 URL 时,可以按如下方式完成。

      name = "test_api_4"
      owner = "jainik@test.com"
      
      url = f"http://localhost:5001/files/create" \
      f"?name={name}" \
      f"&owner={owner}" \
      

      我们在这里使用了多个 f-string,它们可以用 '' 附加。这将使它们保持在同一行中,而不会在它们之间插入任何换行符。

      对于有空格的值

      对于这样的值,你应该在你的 python 文件中导入from urllib.parse import quote,然后引用字符串,如:quote("firstname lastname")

      这会将空格字符替换为%20

      【讨论】:

      • 还有/ 的价值线索吗?喜欢 Freenas 中的数据集 ID?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-07
      • 2013-05-10
      • 2020-07-24
      • 2014-12-11
      相关资源
      最近更新 更多