【发布时间】:2020-08-09 04:40:54
【问题描述】:
我正在尝试从 .txt 文件中提取与 7 个特定设备 (0-6) 相对应的特定行,然后对该数据进行操作。
这是一个例子:
从一个非常大的文件中,我提取了一个事件(这里是 169139),其中包含来自 7 个设备中的 6 个的信息(这里只有 1、2、3、4、5、6,因为设备 0 没有数据)。对于每个这样的事件,我不知道有多少设备将激活作为它们的输出。可以是全部,也可以不是,也可以是一些。
=== 169139 ===
Start: 4.80374e+19
End: 4.80374e+19
--- 1 ---
Pix 9, 66
--- 2 ---
Pix 11, 31
Pix 12, 31
--- 3 ---
Pix 17, 53
Pix 16, 53
Pix 16, 54
--- 4 ---
Pix 44, 64
--- 5 ---
Pix 49, 133
Pix 48, 133
--- 6 ---
Pix 109, 143
Pix 108, 143
Pix 108, 144
Pix 109, 144
事件很容易迭代,我可以选择屏幕上的全部信息,直到下一个(这里,.txt 的下一行是 === 169140 ===)。
我可以使用以下代码从特定设备中提取信息:
def start_stop_plane (list, dev):
start_reading = [i for i in range(len(list)) if list[i] == "--- " + str(dev) + " ---"][0]
stop_reading = [i for i in range(len(list)) if list[i] == "--- " + str(int(dev)+1) + " ---"][0]
return list[start_reading:stop_reading]
这里,list 是第一个代码注释(完整的事件)。它是以与上述代码类似的方式生成的列表,将 --- 与 === 字符串出现(即事件之间的标志)交换。
我的问题:这适用于从 0 到 5 的所有内容。对于 6,它会崩溃,因为没有 int(dev)+1。我尝试在stop_reading 中添加or 以识别=== 的出现,但它不起作用。
在这种情况下,如何发出列表结束信号并确保不会丢失任何设备?
【问题讨论】:
-
变量
dev似乎在您的代码中没有定义。我想你想用dev替换plane。 -
@LydiavanDyke 该函数实际上将 list 和 dev 作为输入 :) 那架飞机是一些旧代码残余。