我正在尝试将google分析脚本插入到我的所有HTML页面中,但是当我再次运行脚本时,文件的内容会重复。
为什么我的脚本会复制文件内容并将其附加到文件的末尾?
如何将分析脚本添加到所有没有该文件的文件中?
import fnmatch
import os
track_code = """
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-48664735-1', 'kylelk.github.io');
ga('send', 'pageview');
</script>
"""
matches = []
for root, dirnames, filenames in os.walk('.'):
for filename in fnmatch.filter(filenames, '*.html'):
matches.append(os.path.join(root, filename))
for file_name in matches:
try:
html_file=open(file_name, "r+")
html_data = html_file.read()
if "</head>" in html_data and not "UA-48664735-1" in html_data:
print file_name
html_data1=list(html_data)
#find index of closing "head" tag
html_data1.insert(html_data.find("</head>"), track_code)
html_file.write("".join(html_data1))
html_file.close()
elif "</HEAD>" in html_data and not "UA-48664735-1" in html_data:
print file_name
html_data1=list(html_data)
html_data 1.insert(html_data.find("</HEAD>"), track_code)
html_file.write("".join(html_data1))
html_file.close()
except IOError:
pass
答案 0 :(得分:2)
基本上,你在这里做的是: 1.以读/写模式打开文件 2.读取整个文件内容,将内部文件指针定位在文件末尾 3.在当前文件指针的位置(即文件末尾)重写整个内容(添加脚本)。
您想要做的是替换文件的内容。最简单,最安全的解决方案是:
现在,由于您更新的内容将比原始内容更长,您还可以在写入之前重新定位内部文件指针(使用file.seek(0)
。