根据其内容对齐某些字符串列表

时间:2018-03-20 09:59:36

标签: string python-3.x indexing alignment

我有一个需要解析为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

1 个答案:

答案 0 :(得分:0)

有几种方法可以解决这个问题。我首先逐行处理源文件,因为这样可以方便地为您提供记录的开头和结尾。但是,您选择以不同方式执行此操作,现在希望规范化您创建的元组。

您可以通过从元组中删除所有空字符串来执行此操作: t = [i for i in t if i != ''] 然后找到" Total"的位置。 idx = t.index("Total") 并用空字符串填充列表 t.insert(idx, '') 您需要在循环中执行此操作以确保长度不变。