使用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
相关产品推荐
相关产品推荐

