【问题标题】:Trying to substitute one variable for another before writing to an HTML File在写入 HTML 文件之前尝试用一个变量替换另一个变量
【发布时间】:2019-11-23 05:57:34
【问题描述】:

我有一个 python 程序,它读取一个 csv 文件,进行一些更改,然后写入一个 HTML 文件。问题是一段代码,我试图搜索分配给一个变量的字符串,然后用分配给另一个变量的另一个字符串替换它。我可以在 csv 文件中读取如下所示的一行:

Link:,www.google.com

我成功编写了一个带有以下内容的 html 文件:

<tr><td>Link:</td><td><a href="https://www.google.com">www.google.com</a></td></tr>

基本上我想更进一步,在锚标签之间找到 www.google.com 并将其替换为“GOOGLE”。

我研究了 python 内置的“查找和替换”函数,并在正则表达式模块 (re.sub()) 中提出了替换函数。这可能不是最好的方法,我试图弄清楚是否有更好的功能/模块我应该研究。

python
   for line in file:
       newHTML.write(re.sub(var1,var2,line,flags=re.MULTILINE), end='')         
       newHTML.write(re.sub(var3,var4,line,flags=re.MULTILINE), end='')

我收到的错误是:

newHTML.write(re.sub(var1,var2,line,flags=re.MULTILINE), end='')
TypeError: write() takes no keyword arguments

如果我注释掉这段代码,程序的其余部分运行良好,尽管没有找到和替换这些变量。

也许 re.sub() 不适合 write()?

【问题讨论】:

  • write() 不是 print() 也没有 end= 。而且它不会在末尾添加"\n"
  • 第一次编写 HTML 时不能输入正确的值吗?创建数据Link:,www.google.com,GOOGLE 并使用它来生成 HTML 可能会更容易。

标签: python


【解决方案1】:

错误说明了问题所在:正如@furas 评论的那样,write()print() 不同,并且不接受end='' 关键字参数。 file.write() 默认情况下不包含换行符,如果您没有明确放置任何 \n's,因此如果您将行更改为:

newHTML.write(re.sub(var1,var2,line,flags=re.MULTILINE))

另外,正则表达式和 HTML aren't the best of friends... 您的情况很简单,使用正则表达式就可以了,但是您提到要寻找更好的模块来生成 HTML。 This SO question 在答案中有一些很好的建议。在上面创建 HTML 模板值得注意的是 xml.etreejinja2(Flask 的默认引擎)和 yattag

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-03
    • 2022-11-17
    • 1970-01-01
    • 2019-11-01
    • 1970-01-01
    • 2012-10-16
    • 2019-09-01
    相关资源
    最近更新 更多