在python

时间:2018-10-24 03:14:21

标签: python string dataframe

我有一系列格式如下的文本文件

Transaction Summary
Joe buys from Mindy 5 apples for 6$
Mark buys from Alex 3 apples for 5$
...
END

在苹果交易量可能不固定的情况下(一个文本文件可能有2个,其他文本文件可能有6个),但是文件的格式都相同。 我基本上想存储“交易摘要”和“结束”之间的行。

我首先咨询了this method,这使我可以打印上述行,但是我不知道如何存储行。

相反,我决定只读取整个文本文件,然后进行存储,然后修剪所需的数据

with open(filename) as f:
    data = f.readlines()
f.close

这样,我可以拼接此字符串列表。我遇到的问题是,虽然我知道从何处开始拼接(1行索引),但是由于每个文本文件的事务量都是可变的,所以我不知道如何选择带有“ END”的特定索引”。

任何输入将不胜感激-谢谢!

2 个答案:

答案 0 :(得分:0)

data.txt

Transaction Summary
Joe buys from Mindy 5 apples for 6$
Mark buys from Alex 3 apples for 5$
END

代码

with open('data.txt') as file:
    lines = file.readlines()

transaction = []
for line in lines[1:-1]:
    tokens = line.split(' ')
    transaction.append((
        tokens[0], 
        tokens[3], 
        int(tokens[4]),
        int(tokens[7].rstrip('$\n')) ))

print(transaction)

结果

[('Joe', 'Mindy', 5, 6), ('Mark', 'Alex', 3, 5)]

答案 1 :(得分:0)

您可以尝试使用正则表达式。

import re

string = """ 
Transaction Summary
Joe buys from Mindy 5 apples for 6$
Mark buys from Alex 3 apples for 5$
END
"""
print(re.findall(r"(\w+) buys from (\w+) (\d+) apples for (\d+)",string))
# [('Joe', 'Mindy', '5', '6'), ('Mark', 'Alex', '3', '5')]