我有一个需要解析为excel的大文本文件。与此类似的原始格式显示购物清单:
Name: Peter
Eggs
Chicken
Fish
Rice
Total:4
Name: Jane
Eggs
Spam
Total:2
Name: David
Rice
Bread
Fish
Total:3
我可以将其解析为一个列表,可以使用openpyxl导出到excel中:
[('',),('Name', 'Peter', 'Eggs', 'Chicken', 'Fish', 'Rice', 'Total', '4', '', ''),('Name', 'Jane', 'Eggs', 'Spam', 'Total', '2', '', ''),('Name', 'David', 'Rice', 'Bread', 'Fish', 'Total', '3')]
最多可以购买6件商品,但我仍然需要将每件商品分开。
with open(file,'r') as f:
text = f.read().replace('\r\n',',')
text = text.replace(':',',')
text = text.replace('Name',':Name')
text = ','.join(text.split('\n'))
text = text.strip()
text = text.replace(', ',',')
text3 = [tuple(x.split(',')) for x in text.split(':')]
这是.xlsx中的输出,但我更喜欢将“total”对齐,是否有可能这样做?由于我只能拥有固定数量的项目(最多6个),有没有办法可以将所有“总数”放入我的代码“text3”中的第I列或第8列?
这是一个输出样本https://imgur.com/GVkmNeC
答案 0 :(得分:0)
有几种方法可以解决这个问题。我首先逐行处理源文件,因为这样可以方便地为您提供记录的开头和结尾。但是,您选择以不同方式执行此操作,现在希望规范化您创建的元组。
您可以通过从元组中删除所有空字符串来执行此操作:
t = [i for i in t if i != '']
然后找到" Total"的位置。
idx = t.index("Total")
并用空字符串填充列表
t.insert(idx, '')
您需要在循环中执行此操作以确保长度不变。