我有一个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()不能很好地配合?
答案 0 :(得分:1)
该错误说明了问题所在:正如@furas所评论的,write()
与print()
不同,并且不接受end=''
关键字参数。如果您未明确放置任何file.write()
,则\n
默认不包含换行符,因此,如果将行更改为:
newHTML.write(re.sub(var1,var2,line,flags=re.MULTILINE))
另外,正则表达式和HTML aren't the best of friends ...您的情况很简单,使用正则表达式很好,但是您提到了寻找更好的模块来生成HTML的情况。 This SO question在答案中提出了一些好的建议。在xml.etree,jinja2(Flask的默认引擎)和yattag上创建HTML模板的值得注意。