【发布时间】:2015-04-07 03:36:05
【问题描述】:
我有一个包含这样数据的文本文件
AA 331
line1 ...
line2 ...
% information here
AA 332
line1 ...
line2 ...
line3 ...
%information here
AA 1021
line1 ...
line2 ...
% information here
AA 1022
line1 ...
% information here
AA 1023
line1 ...
line2 ...
% information here
我只想对位于 "AA 331" 和 "AA 1021" 行之后而不是 "AA 332" 、 "AA 1022" 和 "AA 1023" 行之后的最小整数之后的“信息”执行操作。
P.s 这只是大文件的示例数据
下面的代码我尝试解析文本文件并获取列表“list1”中“AA”之后的整数,在第二个函数中我将它们分组以获得“list2”中的最小值。这将返回像 [331,1021,...] 这样的整数。所以我想提取“AA 331”之后的行并执行操作,但我不知道如何继续。
from itertools import groupby
def getlineindex(textfile):
with open(textfile) as infile:
list1 = []
for line in infile :
if line.startswith("AA"):
intid = line[3:]
list1.append(intid)
return list1
def minimalinteger(list1):
list2 = []
for k,v in groupby(list1,key=lambda x: x//10):
minimalint = min(v)
list2.append(minimalint)
return list2
list2 包含 "AA" [331,1021,..] 之后的最小整数
【问题讨论】:
-
我认为您的问题需要澄清一下。您指定的行之后的“最小整数”是多少?它发生在哪里,该位置是否一致/可靠?此外,您是如何提出“AA 331”和“AA 1021”作为您希望处理的数据的指标的?这是您期望从人类那里接收到的输入,还是有办法通过计算确定它?
-
最小整数我的意思是 331
-
您当然会注意到 331
-
好的,知道了。它们是 10 的整数块。所以它们是随机生成的,但间隔为 10。所以 332 是 331 的副本,而 1022 -1024 是 1021 的副本,所以我想保留块 331 和 1021。[块我的意思是从AA 331 行直到 AA 332 行之前的 % 信息]
-
@Danira,如果一组 10 个中间有一个随机间隙怎么办?那么,如果你有 300,301,302,305,306,307,我们应该处理 300 和 305 吗? (对不起,我在这里反对边缘情况,但我认为有必要为您提供所需的帮助)