从CSV中的超链接单元格提取数据

时间:2020-06-01 20:15:44

标签: python csv

当我从CSV文件读取带有超链接的单元格时,我得到以下信息:

=HYPERLINK("http://google.com","google") #for example

有没有一种方法可以只提取"google"而没有=hyperlink和链接?

1 个答案:

答案 0 :(得分:0)

根据@martineau的评论,您有HYPERLINK的两个版本。

>>> s1 = '=HYPERLINK("http://google.com","google")'

>>> s2 = '=HYPERLINK("http://google.com")'

您可以split,使用正则表达式,但是这些方法比较棘手(如果URL中有逗号,名称中是否有转义引号,该怎么办?)。

有一个名为ast的模块,用于解析Python表达式。我们可以使用它,因为Excel函数调用语法与Python相似。这是一个返回友好名称的版本,如果存在则返回URL:

>>> import ast
>>> ast.parse(s1[1:]).body[0].value.args[-1].s
'google'

并且:

>>> ast.parse(s2[1:]).body[0].value.args[-1].s
'http://google.com'

它是这样工作的:s1[1:]删除了=符号。然后我们取表达式的值:

>>> v = ast.parse(s1[1:]).body[0].value
>>> v
<_ast.Call object at ...>

很容易提取函数名称:

>>> v.func.id
'HYPERLINK'

还有参数:

>>> [arg.s for arg in v.args]
['http://google.com', 'google']

只要有最后一个arg(....args[-1].s) to get the friendly name if it exists, and the url else. You can also check len(args)`,如果有一个arg则执行某些操作,如果有两个args则执行其他操作。