我是个业余Python。我有一个文本文件,列出了上千行的信息,我试图选择一行和下面的2-3行的基础上,他们是否匹配的模式。 我已将文件从原始文件筛选下来,只包含我感兴趣的文件部分,因此我的当前文件如下所示:
trig1.RESP:
stim4: silence.wav
trig1.RESP:
trig6.RESP: 1
trig1.RESP:
trig1.RESP:
trig5.RESP: 1
stim5: silence.wav
trig1.RESP:
trig6.RESP: 1
stim3: silence.wav
trig1.RESP:
stim5: silence.wav
trig1.RESP:
trig6.RESP: 1
等等等等。。。 基本上我要做的就是写下每一行沉默.wav行的一部分,然后是其后的两行。我使用了以下代码:
parsed_output = open("name-of-file-to-be-written", "w")
filtered_input = open("name-of-file-that-has-above-data", "r")
for line in filtered_input:
if "silence.wav" in line and "trig1" in filtered_input.next():
parsed_output.write(line)
parsed_output.write(filtered_input.next())
parsed_output.close()
这在大多数情况下都很好,因为它可以打印沉默.wav行和具有响应的行(我最感兴趣的部分,此时响应之前的trig1不太重要)。然而,我遇到的问题是,当线路走到:
stim3: silence.wav
trig1.RESP:
stim5: silence.wav
因为我的输出将写入stim3(当前行)和stim5(跳过trig1后的下一行),所以我认为它将转到下一行刺激:沉默.wav并跳过stim5,因为它在编写时包含在上一个命令中。 我想要在stim5之后使用trig6.RESP:1,但是由于我描述的原因,我的输出没有显示它。 有没有办法让它不跳过那一步?你知道吗
抱歉,如果时间太长了。提前谢谢!你知道吗
一种可能的方法是使用deque,这样您可以一次跟踪三行:
如果您向deque提供
maxlen
参数,那么当您向一端添加其他元素时,另一端会弹出一个元素,例如:这允许您迭代文件,但以方便的方式保存读取的最后3行,
window
的第一个元素与您的条件匹配时,只需输出匹配的行和以下两行,只要它们与您的条件不匹配即可。你知道吗像这样的怎么样?(完全未经测试)
这不花哨,但我认为它应该很结实。你知道吗
我试图把它翻译成psuedocode:
(请在这里纠正我)
你错过了Trig6,因为你要求的下一行不存在。你能把它改写成向后而不是向前,这样就解决了你的问题吗?你知道吗
相关问题 更多 >
编程相关推荐