Python如何解决saveHTML函数结果无法写入HTML文件的问题
问题原因
报错核心是两个问题,附带还有几处会阻塞运行的代码错误:
saveHTML()函数没有定义返回值,Python中没有显式return的函数默认返回None,调用file_html.write()传入None自然触发类型错误,强转后写入的就是字符串"None"。- 函数内部仅用
print()把内容输出到控制台,没有做字符串拼接、存储的逻辑,打印的内容不会自动作为函数返回值传递。 - 其余隐藏错误:
- Python不支持数字开头的变量名,
1channel/1_T/1_number/1_name均为非法标识符,运行直接触发语法错误 - 每行分割得到的链接变量名为
id_ace,后续替换占位符时错写为id_acestream,会触发变量不存在的错误 - 代码中引用了未定义的
Language变量 - 按钮的HTML标签被拆成
Beforeid/Afterid两部分时没有留衔接空格,还多了无意义的[code]标记,会生成残缺的页面结构
- Python不支持数字开头的变量名,
修复后代码
直接替换原代码即可,注意Language变量我留了空字符串示例,你有实际值直接替换:
Channel_name_before = '<p style="margin-top: 0px;"><span style="font-size: 6pt;"><strong><span style="background-color: #ccffcc;">' Channel_name_after = '</span></strong></span></p>\n' # 修正标签结构,去掉多余[code]标记,末尾留空格衔接img属性 Beforeid = '<div><a href="aceid" rel="nofollow"><button class="main-button-stream"><img class="main-button-img" ' Afterid = 'src="/language/ac/flag.svg" /> Click </button></a></div>\n' # 替换数字开头的非法变量名 channel_map = [('1:','Test 1'), ('2:','Test 2'),] def saveHTML(): html_segments = [] for line in content: line = line.strip() if not line: continue id_name, id_ace = line.split(': ') for ch_item in channel_map: ch_num, ch_name = ch_item if ch_num.strip(':') == id_name: # 拼接频道标题 title = f"{Channel_name_before}{ch_num} {ch_name}{Channel_name_after}" # 替换占位符,补全Language变量 Language = "" button = f"{Beforeid.replace('aceid', id_ace)}{Language}{Afterid}" html_segments.append(title + button) # 拼接所有片段作为返回值 return ''.join(html_segments) # 用上下文管理器处理文件,自动关闭资源,避免手动close漏写 with open('id.txt', "r", encoding="utf-8") as file_txt: content = file_txt.readlines() with open('sample.html', "w", encoding="utf-8") as file_html: file_html.write('<html>\n<head>Test1</head>\n<body>\n<div align="center"><strong>Channels:</strong></div></br>\n<div class="columns">') html_content = saveHTML() file_html.write(html_content) file_html.write('</div>\n</body>\n</html>')
后续要新增匹配的频道,直接往
channel_map列表里添加('频道id:', '频道显示名称')格式的元组即可。
内容的提问来源于stack exchange,提问作者user19421517
相关产品推荐
相关产品推荐

