【问题标题】:Python Requests - downloading a .py file from GitHubPython 请求 - 从 GitHub 下载 .py 文件
【发布时间】:2021-08-01 17:49:25
【问题描述】:

我正在尝试使用 Requests 从 GitHub 目录加载 .py 文件。 .py 文件的开头是这样的(我猜是字典?):

colors = {

    "1234": {
        "shade": [1, 2, 3]
        }
    }

我使用以下代码:

import requests
r = requests.get('https://raw.github.com/example/example1/master/scripts/colors.py')

我希望 r 是一个变量或字典,这样我就可以轻松地在里面查找一些特定的字符串。但是,当我打印 r 时,我没有得到 .py 文件,但也有 \r\n 等标志。如何正确读取此文件?

r.text

>>> 'colors = {\r\n\r\n    "1234": {\r\n        "shade": [1, 2, 3]}\r\n}\r\n'

最后我想创建一个字典,其中“阴影”我获得所有值。所以首先我需要在 r 中搜索“shade”这个词。

如果您有任何建议和解决方案,我将不胜感激。

【问题讨论】:

  • "我希望 r 成为一个变量" - 它一个变量。 “但是,当我打印 r 时,我没有得到一个 .py 文件”——因为它是一个字符串,而不是一个文件。
  • ast.literal_eval(r.content)?您必须希望 repo 的所有者不会在该文件中插入恶意代码
  • 不幸的是它给出了一个错误:>>> ast.literal_eval(r.content) Traceback(最近一次调用最后):文件“”,第 1 行,在 文件“/ usr/lib/python3.9/ast.py",第 105 行,在 literal_eval 中返回 _convert(node_or_string) 文件 "/usr/lib/python3.9/ast.py",第 104 行,在 _convert 返回 _convert_signed_num(node) 文件“/usr/lib/python3.9/ast.py”,第 78 行,在 _convert_signed_num 返回 _convert_num(node) 文件“/usr/lib/python3.9/ast.py”,第 69 行,在 _convert_num _raise_malformed_node(node)
  • 文件“/usr/lib/python3.9/ast.py”,第 66 行,在 _raise_malformed_node 中引发 ValueError(f'malformed node or string: {node!r}') ValueError: malformed node或字符串:b'colors = {\r\n\r\n "1234": {\r\n "shade": [1, 2, 3],

标签: python python-3.x string python-requests


【解决方案1】:

由于是 Python 代码,而不仅仅是字符串文字,所以使用exec,但要注意如果代码是恶意的,它将被执行:

text = 'colors = {\r\n\r\n    "1234": {\r\n        "shade": [1, 2, 3]}\r\n}\r\n'
exec(text)
print(colors['1234']['shade'])

输出:

[1, 2, 3]

【讨论】:

  • 回溯(最近一次调用最后):文件“”,第 1 行,在 类型错误:字符串索引必须是整数
  • @enten77 你运行了上面的exact代码?它有效。
  • 是的,它对“text = 'colors = ...”非常有效,但是当我尝试将它应用于我的数据(r.text)时,它不起作用,不幸的是。不知道为什么会这样。
  • @enten77 您必须显示r.text准确 内容。如果它是一个类似text 的字符串,并且是 valid Python 代码,它应该可以工作。事实上,它适用于您在问题中显示的r.text(一旦我添加了缺少的最终')。
  • @enten77 该错误表明出现错误的代码行使用字符串来索引变量,但该变量是一个列表并且需要整数 ['123'][123] 例如。如果您显示代码和完整的错误回溯,您可以获得帮助,也许是在一个新问题中。 this 问题的答案是“当字符串是 Python 代码时使用 exec”。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-06
  • 2021-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-23
相关资源
最近更新 更多