You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用xlsxwriter写入Excel时For循环仅写入单个字母的问题

德语动词变位爬取结果写入Excel单字符问题解决方案

问题根因

写入逻辑的双层循环写法有误:

  • Python中字符串是可迭代对象,enumerate(i.text)会把单个变位词拆成逐字符的序列遍历
  • 写入时行号固定为1,每遍历到新的变位词都会从第0列开始覆盖之前的内容,最终只保留第一个变位词mache拆分出的m、a、c、h、e单字符

简洁实现方案

无需提前把所有结果攒入列表,两种写法可直接实现需求:

方案1:遍历标签时同步维护列号

删除遍历字符串的内层循环,在遍历变位词标签时直接递增列号写入:

from bs4 import BeautifulSoup
import xlsxwriter

workbook = xlsxwriter.Workbook('Python/Verben/verben.xlsx')
worksheet = workbook.add_worksheet()

# 用with上下文管理器自动处理文件关闭,避免资源泄漏
with open('Python/Verben/machen_konjugation.html', 'r', encoding='utf-8') as html_doc:
    soup = BeautifulSoup(html_doc, 'html.parser')

blueBox = soup.find_all('div', class_='blue-box-wrap')
for col_num, verb_elem in enumerate(blueBox[0].find_all('i', class_='verbtxt')):
    worksheet.write(1, col_num, verb_elem.text)

workbook.close()

方案2:调用xlsxwriter内置行写入方法(最简洁)

xlsxwriter自带write_row()方法,支持直接传入可迭代对象,自动从指定起始单元格开始逐列写入内容,不需要手动写循环计数:

from bs4 import BeautifulSoup
import xlsxwriter

workbook = xlsxwriter.Workbook('Python/Verben/verben.xlsx')
worksheet = workbook.add_worksheet()

with open('Python/Verben/machen_konjugation.html', 'r', encoding='utf-8') as html_doc:
    soup = BeautifulSoup(html_doc, 'html.parser')

blueBox = soup.find_all('div', class_='blue-box-wrap')
# 传入生成器表达式,从A2单元格(行索引1、列索引0)开始一次性写入整行
worksheet.write_row(1, 0, (elem.text for elem in blueBox[0].find_all('i', class_='verbtxt')))

workbook.close()

两种写法运行后,都会在Excel第2行逐单元格写入mache、machst、macht、machen、macht、machen6个完整变位词,不会出现字符拆分问题。


内容的提问来源于stack exchange,提问作者user14857618

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 13:27:22