python - 即使输出与原始输出相同,代码仍会保存文档?

标签 python python-2.7 csv if-statement for-loop

在我下面的代码中,出于某种原因它一直将输出数据写入文件,即使我的输出数据与新生成的数据相同......

我试图让它只在不同时保存,为了重现我的问题运行脚本至少三次并且它不应该打印 again 超过一次

代码示例

import csv

def get_html_table(data):
    s = """<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Title</title>
</head>
    <body>
        <table id="gradient-style">
            <tbody>\n"""
    for row in data:
        s += '        <tr>'
        for counter, cell in enumerate(row):
            s += r'<td>{}</td>'.format(cell)
        s += '</tr>\n'
    s += """            </tbody>
        </table>
    </body>
</html>"""
    return s


with open('testoutput.html', 'rb') as old_html:
    old_html = old_html.read()

identifyer = ""
with open('random.csv') as ifile, open('testoutput.html', 'wb') as ofile:
    data = []

    for counter, row in enumerate(csv.reader(ifile)):
        if counter != 0:
            datatoapp = [row[0], row[1], row[2], row[3]]
            data.append(datatoapp)

    html_data = get_html_table(data)
    old_html = old_html.strip()
    html_data = html_data.strip()

    if old_html != html_data.strip():
        if html_data:
            print "again"
            ofile.write(html_data)

print "done"

如您所见,上面的代码将 csv 转换为一种 html 形式,但不包含一些数据。

随机.csv

data,data,data,data,data
data,data,data,data,data
data,data,data,data,data
data,data,data,data,data
data,data,data,data,data

有什么办法可以解决这个问题吗?

最佳答案

这是因为您正在打开文件然后进行比较,因为它是相同的,所以不会在文件中保存任何内容。

比较例如你的代码的底部部分后打开文件:

import csv

def get_html_table(data):
    s = """<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Title</title>
</head>
    <body>
        <table id="gradient-style">
            <tbody>\n"""
    for row in data:
        s += '        <tr>'
        for counter, cell in enumerate(row):
            s += r'<td>{}</td>'.format(cell)
        s += '</tr>\n'
    s += """            </tbody>
        </table>
    </body>
</html>"""
    return s

with open('testoutput.html', 'rb') as old_html:
    old_html = old_html.read()

with open('random.csv') as ifile:
    data = []

    for counter, row in enumerate(csv.reader(ifile)):
        if counter != 0:
            datatoapp = [row[0], row[1], row[2], row[3]]
            data.append(datatoapp)    

    html_data = get_html_table(data)

if old_html != html_data:
    if html_data:
        with open('testoutput.html', "wb") as ofile:
            ofile.write(html_data)

希望这对您有所帮助:)
- Hyflex

关于python - 即使输出与原始输出相同,代码仍会保存文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19795272/

相关文章:

python - 如何使用python查找文件夹中的特定文件

python - Robot Framework 的 Mongo Db 扩展库返回错误记录

python - 如果前一个字段为空,则用以前的数据填充表中的下一个字段

java - 使用类路径在 java 中加载 CSV

python - LLVM IR 到 Python 编译器

python - Deeplab v3+ 元组组件中的形状不匹配

python - 如何过滤Qtableview中的多列?

php - 确定所有 CSV 列的最小值和最大值

Python-正则表达式 "Machine Learning"

python find 方法不适用于此处的 "/"