【发布时间】:2019-12-16 17:37:20
【问题描述】:
我有一个 python scraping 脚本来获取一些即将到来的音乐会的信息,并且无论有多少音乐会出现,每次都是相同的文本模式,唯一的区别是有时它会显示一个额外的行仍然可以预订时的门票价格,例如以下示例:
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]]
【问题讨论】:
-
您的预期输出如何?
-
我实际上已经为每个数据(日期、波段、位置等)分配了一个变量,所以当我在行之间迭代时,我正在这样做: dates = [i for i in lines [0 ::4]]。因此,在获得行号后,我将能够为我的 if 语句分配 2 个类别,日期 = [i for i in lines [0::4]] & dates = [i for i in lines [0:: 5]]
-
所以你的最终输出将是一个列标题为日期、波段、位置、价格等的表格。我说的对吗?
-
我刚刚编辑了我的初始帖子,以便更清楚地了解一些代码想法;)