如何基于输入次数重复生成HTML产品表格?Python脚本求助
搞定重复生成产品表格的问题
嘿,我明白你现在的困扰——想让脚本根据用户输入的次数重复生成相同的产品表格,但直接用“乘法”调用函数行不通对吧?咱们一步步来解决这个问题:
先说说原代码的问题
你原来的html函数每次调用都会直接覆盖写入文件(用的'w'模式),而且函数本身没有返回任何内容(默认返回None),所以你尝试的html(...) * 3根本没法工作,因为None不能做乘法运算。咱们得重构一下代码逻辑,把生成表格和写入文件的操作分开,这样就能灵活重复表格了。
重构后的完整代码
import locale import requests import urlparse import json # 负责生成单个产品表格的HTML字符串 def generate_product_table(sku_01, desc_01, sku_precio_1, sku_02, desc_02, sku_precio_2): return """<table> <tr> <td colspan="4" height="30"></td> </tr> <tr> <td width="50" class="width6p"></td> <td width="260" class="width44p"><a href="http://www.site/product/{}" target="_blank"><img src="http://site/images/{}" width="230" alt="{}" style="display:block" border="0" class="width90p"/></a></td> <td width="30" class="width3p"></td> <td width="260" class="width44p"><a href="http://www.site/product/{}" target="_blank"><img src="http://site/images/{}" width="230" alt="{}" style="display:block" border="0" class="width90p"/></a></td> </tr> <tr> <td></td> <td class="font14" valign="top" style=" font-size: 16px; inline-height:0px; font-family:Helvetica, sans-serif; font-weight:lighter; color:#666666; line-height:130%; padding:10px 0px;"> <span style="font-weight: bold; color:#008EAA" class="font14">{}</span ><br /> <span style="font-weight: bold; color:#008EAA; font-size:14px;" class="font14">{} {}</span><br/> <span style="font-size:12px;" class="font12">SKU: {}-{}</span><br /> <span style="font-size:18px;" class="font14">$ </span> <span style="font-size:24px; line-height:30px;" class="font20">{}</span> <span style="font-size:12px; text-transform: uppercase;" class="font10"> C/U</span> <br> </td> <td></td> <td class="font14" valign="top" style=" font-size: 16px; inline-height:0px; font-family:Helvetica, sans-serif; font-weight:lighter; color:#666666; line-height:130%; padding:10px 0px;"> <span style="font-weight: bold; color:#008EAA" class="font14">{}</span><br /> <span style="font-weight: bold; color:#008EAA; font-size:14px;" class="font14">{} {}</span><br/> <span style="font-size:12px;" class="font12">SKU: {}-{}</span><br /> <span style="font-size:18px;" class="font14">$ </span> <span style="font-size:24px; line-height:30px;" class="font20">{}</span> <span style="font-size:12px; text-transform: uppercase;" class="font10"> C/U</span> <br> </td> </tr> <tr> <td></td> <td style="inline-height:0px;padding-top:4px;"><a href="http://www.site/product/{}" target="_blank"><img src="http://www.site/templates/images/loquiero_med.png" width="142" title="Ver producto" style="display:block" border="0" class="width115"/></a></td> <td></td> <td style="inline-height:0px;padding-top:4px;"><a href="http://www.site/product/{}" target="_blank"><img src="http://www.site/templates/images/loquiero_med.png" width="142" title="Ver producto" style="display:block" border="0" class="width115"/></a></td> </tr> </table>""".format( sku_01, sku_01, desc_01, sku_02, sku_02, desc_02, ' '.join(desc_01.split()[0:3]), ' '.join(desc_01.split()[3:-1]), desc_01.split()[-1], sku_01[0:-1], sku_01[-1], sku_precio_1, ' '.join(desc_02.split()[0:3]), ' '.join(desc_02.split()[3:-1]), desc_02.split()[-1], sku_02[0:-1], sku_02[-1], sku_precio_2, sku_01, sku_02 ) # 负责把所有表格内容写入HTML文件 def write_html_file(tables_content): # 用with语句自动管理文件,不用手动close with open('mkt-output.html', 'w') as f: # 加上基础的HTML结构,让文件在浏览器里显示更规范 f.write('<html><body>') f.write(tables_content) f.write('</body></html>') if __name__ == '__main__': # 先获取两款产品的信息 sku_01 = raw_input('Ingrese SKU: ') desc_01 = raw_input('Descripcion de SKU: ') sku_precio_1 = raw_input('Precio de SKU: ') sku_02 = raw_input('Ingrese SKU: ') desc_02 = raw_input('Descripcion de SKU: ') sku_precio_2 = raw_input('Precio de SKU: ') # 获取用户想要生成的表格数量 table_count = int(raw_input('Ingrese cantidad de tablas a generar: ')) # 生成单个表格的HTML字符串 single_table = generate_product_table(sku_01, desc_01, sku_precio_1, sku_02, desc_02, sku_precio_2) # 字符串支持乘法!直接重复指定次数,得到所有表格的内容 all_tables = single_table * table_count # 写入文件 write_html_file(all_tables)
关键改动说明
- 拆分函数职责:把生成表格和写入文件分开,
generate_product_table只返回单个表格的HTML字符串,这样我们可以随意重复它。 - 利用字符串乘法:Python的字符串支持
*操作,比如"abc" * 3会得到"abcabcabc",完美解决重复表格的需求。 - 安全的文件操作:用
with语句自动关闭文件,避免忘记close()导致的问题。 - 添加HTML基础结构:给生成的文件加上
<html><body>,这样在浏览器打开时格式更正确。
额外小提示
如果之后需要每个表格的产品信息不一样,你可以把获取产品信息的代码放到循环里,每次循环输入不同的SKU和描述,然后把每个生成的表格片段追加到all_tables里就行啦!
内容的提问来源于stack exchange,提问作者Reezppo
相关产品推荐
相关产品推荐

