【问题标题】:How can I use the built-in Python read() function in Julia using PyCall?如何使用 PyCall 在 Julia 中使用内置的 Python read() 函数?
【发布时间】:2015-06-16 19:45:08
【问题描述】:

我正在使用 Julia,现在我正在尝试使用 PyCall 包,以便可以使用 BeautifulSoup 模块进行 Web 解析。我的 Julia 代码看起来像

using PyCall
pyinitialize("python3")
@pyimport bs4 #need BeautifulSoup
@pyimport urllib.request as urllib #need urlopen

url_base = "blah"
html = urllib.urlopen(url_base).read()
soup = bs4.BeautifulSoup(html, "lxml")

但是,当我尝试运行它时,我收到了有关 read() 函数的投诉。我一开始以为read() 会是一个内置的Python 函数,但是pybuiltin("read") 不起作用。

我不确定我可以导入什么 Python 模块来获取读取功能。我尝试导入io 模块并使用io.read(),但这不起作用。此外,使用 Julia 的内置读取函数不起作用,因为 urllib.urlopen(url_base)PyObject

【问题讨论】:

  • 您使用的是哪个 Python 版本?带有 urllib 的 Python 2 和 3 之间发生了一些变化:docs.python.org/2/library/urllib.html
  • 我现在正在使用 Python 3。我有 urllib.request 作为我要导入的模块,尽管我将它重命名为 urllib 因为它更容易输入(我认为“。”不能在 Julia 中重载?)。

标签: python io julia


【解决方案1】:

你有一个错字:

html = urllib.urlopen(url_base).read()

应该是

html = urllib.urlopen(url_base)[:read]()

请参阅PyCall 文档:

重要提示:与Python最大的区别在于对象属性/成员是用o[:attribute]而不是o.attribute访问的,所以Python中的o.method(...)在Julia中被o[:method](...)代替.此外,您使用get(o, key) 而不是o[key]。 (但是,您可以像在 Python 中一样通过 o[i] 访问整数索引,尽管使用基于 1 的 Julian 索引而不是基于 0 的 Python 索引。)

【讨论】:

    【解决方案2】:

    您需要分开阅读回复。而不是:

    html = urllib.urlopen(url_base).read()
    

    试试:

    with urllib.urlopen(url_base) as response:
        html = response.read()
    

    Python 3 大大提高了清晰度和可读性。

    【讨论】:

    • 啊,对不起,如果我不清楚这一点!我上面的评论可能让我看起来像是在用 Python 编码。我正在使用 Julia,但我正在使用某人的包,它可以让您在 Julia 中导入 Python 模块。所以这种语法在 Julia 中不起作用。
    • 啊,我的错!我想知道为什么会有一种奇怪的语法,但我想这可能是 Python 中的 Julia 约定;不是相反。对造成的误解深表歉意,祝您好运。
    • 能否分享一下解决方案。我也遇到了 julia/python 语法的问题。我正在尝试执行 request = urllib2.Request(url, json_payload, "{'Content-Type': 'application/json'}")
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多