【问题标题】:Make links to hyperlinks in csv file through Python通过 Python 链接到 csv 文件中的超链接
【发布时间】:2020-08-05 07:51:58
【问题描述】:

如何将 CSV 文件中的所有链接都设为超链接? - 只需将 HTML 标记添加到所有带有链接的字段

我认为可以通过 Python 实现

CSV 字符串看起来像

"Name","CompanyName","Value1","Value2","Value3","Value4","Value5","Value6","Value7","Url","Value8 ""Value8.1"""
"Name","Company1","SomeValue1","SomeValue2","SomeValue3","SomeValue4","SomeValue5","SomeValue6","SomeValue7","https://company1.com","Some"Value8 ""Value8.1"""
"Name","Company2","SomeValue1","SomeValue2","SomeValue3","SomeValue4","SomeValue5","SomeValue6","SomeValue7","https://company2.com","Some"Value8 ""Value8.1"""

应该是这样的:

"Name","CompanyName","Value1","Value2","Value3","Value4","Value5","Value6", "Value7","Url","Value8"
"Name","Company1","SomeValue1","SomeValue2","SomeValue3","SomeValue4","SomeValue5","SomeValue6","SomeValue7","<a href="https://company1.com">https://company1.com</a>","Some"Value8 ""Value8.1"""
"Name","Company2","SomeValue1","SomeValue2","SomeValue3","SomeValue4","SomeValue5","SomeValue6","SomeValue7","<a href="https://company2.com">https://company2.com</a>","Some"Value8 ""Value8.1"""
"Name","Company3","SomeValue1","SomeValue2","SomeValue3","SomeValue4","SomeValue5","SomeValue6","SomeValue7","<a href="https://company3.com">https://company3.com</a>","Some"Value8 ""Value8.1"""

我尝试了 awk 和 sed,但是当我在文件中指定一列时会出错。我觉得脚本应该找到所有链接并将其插入 HTML 标签。但我还不明白它是如何工作的

提前致谢

【问题讨论】:

  • 使用csv 模块,遍历值。当你在你想要的行中时,你可以使用 replace() 方法来创建超链接
  • 好的,谢谢,我马上试试
  • 抱歉,我知道这可能不是一个详细/清晰的消息,但我现在赶上了,想给你一个开始。如果您在这里评论有问题,我会发布更好的答案
  • @Mykola 你愿意使用熊猫吗?
  • @Shubham,用什么都没关系,主要是做超链接

标签: python csv awk sed formatting


【解决方案1】:

这里有一个快速而肮脏的例子来说明如何做到这一点。可以看csv模块的例子here

您的示例数据有一些额外的空格 - 如果您的真实数据是这样的,您可以使用strip() 方法删除空格。

如果您的 URL 在同一列中不一致,那么这将不起作用,您将需要使用 regex 或 urllib 来识别它们。

import csv

count = 0
with open('test.csv', 'r') as f:
    csv_reader = csv.reader(f)
    with open('outfile.csv', 'w') as outfile:
    for row in csv_reader:
        row[0] = f'"{row[0]}'
        if count < 1:
            outfile.write('","'.join(row) + '"\n')
            count += 1
        else:
            row[-2] = f'<a href="{row[-2]}">{row[-2]}</a>'
            outfile.write('","'.join(row) + '"\n')

【讨论】:

  • 对不起,我的错,原始 CSV 文件中没有多余的空格
  • @Mykola 不用担心,我忘记提到的一件事是,根据您需要编辑的列的位置,您可能需要用正确的索引替换这两个-2s。如果您想将数据写回文件,该方法看起来非常相似,只需使用 csv.writer() 代替
  • @Mykola 我将编辑答案以包括写作部分 - 如果它对你有用,你会接受答案是正确的
  • @Mykola 试试看,如果有任何问题,请告诉我
  • 它几乎可以正常工作,但是在 outfile.csv 中,除了带有超链接的列之外,我们在所有列中都丢失了双引号
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-10
  • 2020-01-31
  • 1970-01-01
  • 1970-01-01
  • 2021-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多