如何按内容对齐解析文本所得字符串列表并导出至Excel?
把购物清单列表对齐到Excel对应列的方法
嘿,你已经搞定了文本到列表的解析,现在就差把这些内容按类别对齐到Excel列里了对吧?我给你一套实用的步骤,亲测有效:
1. 先梳理所有需要的列标题
首先得把所有出现过的字段都捞出来——包括固定的Name、Total,还有所有出现过的食物名称,这样才能确定Excel里的列数和每一列对应的内容。
从你的数据里,我们能得到完整的列集合:['Name', 'Total', 'Bread', 'Chicken', 'Eggs', 'Fish', 'Rice', 'Spam'](食物可以按字母排序,也可以按出现顺序来)。
用代码实现的话,可以这么写:
# 先把你的原始解析列表整理一下,去掉那个空的首行 raw_data = [ ('Name', 'Peter', 'Eggs', 'Chicken', 'Fish', 'Rice', 'Total', '4'), ('Name', 'Jane', 'Eggs', 'Spam', 'Total', '2'), ('Name', 'David', 'Rice', 'Bread', 'Fish', 'Total', '3') ] # 提取所有可能的字段 all_fields = set() for row in raw_data: idx = 0 while idx < len(row): # 遇到Name或Total,要跳过后面跟着的值(比如Name后面是Peter) if row[idx] in ('Name', 'Total'): all_fields.add(row[idx]) idx += 2 # 食物名称直接加入集合 else: all_fields.add(row[idx]) idx += 1 # 整理成有序的列标题:固定字段放前面,食物按排序来 fixed_cols = ['Name', 'Total'] food_cols = sorted([col for col in all_fields if col not in fixed_cols]) column_titles = fixed_cols + food_cols
2. 把原始行数据映射到对齐后的列
接下来,我们要把每一行的原始数据,按照上面的列标题重新对应,有内容的填进去,没有的就留空。
代码示例:
# 先把列标题作为第一行 aligned_rows = [column_titles] for row in raw_data: row_content = {} idx = 0 while idx < len(row): if row[idx] == 'Name': row_content['Name'] = row[idx+1] idx += 2 elif row[idx] == 'Total': row_content['Total'] = row[idx+1] idx += 2 else: # 这里可以标记为"有"或者直接留空,看你需求,我用"Yes"表示该食物在清单里 row_content[row[idx]] = 'Yes' idx += 1 # 按照列标题的顺序生成对齐后的行,没有的内容填空字符串 aligned_row = [row_content.get(col, '') for col in column_titles] aligned_rows.append(aligned_row)
运行后,aligned_rows的结构就变成了整齐的格式:
[ ['Name', 'Total', 'Bread', 'Chicken', 'Eggs', 'Fish', 'Rice', 'Spam'], ['Peter', '4', '', 'Yes', 'Yes', 'Yes', 'Yes', ''], ['Jane', '2', '', '', 'Yes', '', '', 'Yes'], ['David', '3', 'Yes', '', '', 'Yes', 'Yes', ''] ]
3. 用openpyxl导出到Excel
最后一步就是把对齐好的数据写入Excel,这个就很简单了:
from openpyxl import Workbook # 创建工作簿和工作表 wb = Workbook() ws = wb.active # 逐行写入数据 for row in aligned_rows: ws.append(row) # 保存文件 wb.save('aligned_shopping_list.xlsx')
这样导出的Excel里,每个人的姓名、总数量,还有每种食物都会乖乖待在对应的列里啦!
内容的提问来源于stack exchange,提问作者Pluralitas
相关产品推荐
相关产品推荐

