首页 > 解决方案 > python - 如何计算python文本文件中相同关键字出现2次的行数?

问题描述

我有一个 python抓取脚本来获取一些即将举行的音乐会的信息,无论有多少场音乐会出现,它每次都是相同的文本模式,唯一的区别是有时它会在门票价格仍然显示时显示额外的一行可以预订,例如以下示例:

LIVE 01/01/99 9PM
Iron Maiden
Madison Square Garden 
New York City
LIVE 01/01/99 9.30PM
The Doors
Staples Center
Los Angeles
LIVE 01/02/99 8.45PM
Dr Dre & Snoop Dogg
Staples Center
Los Angeles
Book a ticket now for $99,99
LIVE 01/02/99 9PM
Diana Ross
City Hall
New York City 
Book a ticket now for $79,99       ect...

我需要计算每个文本块的行数并检查它是 4 行还是 5 行,所以我想的是计算每个块的第一个单词(“LIVE”)的出现,然后添加一个if 语句对 2 个类别之间的块进行排序(4 行块和 5 行块)

if 语句部分并不难,但我只是不知道如何做第一部分,也许是 readlines 然后当一行有关键字“LIVE”时,添加行位置(提供的数据样本将是行1,第5行,第9行,第14行,这里我们可以清楚地看到前2个块是4行,而第3个是5行)然后if语句部分将它们整理出来

任何帮助将不胜感激,谢谢!

用我的代码想法编辑,我希望它会更清楚,我需要获取变量 line_number 和 gap_each_line 的代码:

with open('concerts_list.txt', 'r') as file:          
    reading_file = file.read()
    lines = reading_file.split('\n')
    for "LIVE" in lines:
        line_number = #the part where I'm stuck to tell each line number
 where the word "LIVE" appears. output desired: [0, 4, 8, 13]
        gap_each_line = #calculate the gap between each number of previous 
variable line_number. output desired: [4, 4, 5]
    if gap == 4 for gap in gap_each_line:
        dates = [i for i in lines [0::4]]
    elif gap == 5 for gap in gap_each_line:
        dates = [i for i in lines [0::5]]

标签: pythonstringtextline

解决方案


您可以使用read_csv of pandas模块。

我希望您的整个问题(查找日期等)都可以使用pandas.

下面是查找以“LIVE”开头的行之间的行差异的代码

import pandas as pd
df = pd.read_csv('/Users/prince/Downloads/test3.csv', sep='~~~', header=None, engine='python')
df.columns = ['Details']
df['si_no'] = df['Details'].str.startswith('LIVE').cumsum()
gaps = df.groupby('si_no').apply(lambda x : len(x)).values
print(gaps)

它会打印

[4 4 5 5]

推荐阅读