【发布时间】:2013-06-21 12:46:56
【问题描述】:
我正在尝试使用 Python 生成一组 HTML 表格,其中包含从 CSV 中提取的值。该脚本运行良好,但是它会在任何拉入值的地方添加奇数的“¬†”字符。
这是我用来抓取 CSV 数据的代码:
import csv
import fileinput
import re
out=open("audiencestats.csv","rU")
data=csv.reader(out)
values =[row for row in data]
metrics = values.pop(0)
out.close()
这会创建一个函数来制作 html 表格:
def maketable(leftmetric, rightmetric, leftvalue, rightvalue):
template = '''
<table width="99%%" border="1">
<tbody>
<tr>
<td align="center" valign="middle">
<h3>%s</h3>
</td>
<td align="center" valign="middle">
<h3>%s</h3>
</td>
</tr>
<tr>
<td align="center" valign="middle"> %s</td>
<td align="center" valign="middle"> %s</td>
</tr>
</tbody>
</table>
'''
file.write(template % (leftmetric, rightmetric, leftvalue, rightvalue))
然后将表格写入文本文件:
for i in values:
filename = "%s.txt" % i[0]
file = open(filename , 'w')
file.write(header)
maketable(metrics[1],metrics[2],i[1],i[2])
maketable(metrics[3],metrics[4],i[3],i[4])
maketable(metrics[5],metrics[6],i[5],i[6])
maketable(metrics[7],metrics[8],i[7],i[8])
maketable(metrics[9],metrics[10],i[9],i[10])
maketable(metrics[11],metrics[12],i[11],i[12])
file.write(header2)
print makesocial(i[13],i[14],i[15])
file.close()
我尝试将下面的 re.sub 添加到 for 循环中,但十字仍然存在。
for line in fileinput.input(inplace=1):
line = re.sub(' ','', line.rstrip())
print(line)
我错过了什么吗?我的电脑变成宗教了吗?
下面也复制了输出示例:
<h1>Audience</h1>
<table width="99%" border="1">
<tbody>
<tr>
<td align="center" valign="middle">
<h3>UVs (000)</h3>
</td>
<td align="center" valign="middle">
<h3>PVs (000)</h3>
</td>
</tr>
<tr>
<td align="center" valign="middle"> 580.705</td>
<td align="center" valign="middle"> 1003</td>
</tr>
</tbody>
</table>
【问题讨论】:
-
它是某种 Unicode 货币符号吗? CSV 文件中有什么内容?这两个字符的二进制值是多少?
-
这听起来像是编码问题。 CSV 文件采用什么编码?您可以将其上传(一小部分)到某处,还是将其作为二进制文件和
print(' '.join(hex(ord(c)) for c in f.readline()))或类似文件打开? -
另外,你为什么要尝试使用
re.sub来替换固定的子字符串?只需使用str.replace即可。 -
另外,您可能正在使用 Python 2.x。如果是这样,将非 ASCII 字符放入像
'¬†'这样的非 Unicode 文字中是一个非常非常糟糕的主意,将非 ASCII 字符放入没有 encoding declaration 的源文件中是一个更糟糕的主意,以及更糟糕的想法是将它们放入源文件而不知道(并在您的问题中提及)您的文本编辑器使用什么编码。 -
csv是一行表头,然后是30行左右的数据,看起来是这样的:
name,metric1,metric2,metric3john,a,b,c,dbill,e,f,g,hharry,i,j,k,l
标签: python html regex html-table import-from-csv