回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我想处理一个文本文件(逐行)。一个(最初未知)数量的连续行属于同一个实体(即它们与行携带相同的标识符)。例如:</p>
<pre><code>line1: stuff, stuff2, stuff3, ID1, stuff4, stuff5
line2: stuff, stuff2, stuff3, ID1, stuff4, stuff5
line3: stuff, stuff2, stuff3, ID1, stuff4, stuff5
line4: stuff, stuff2, stuff3, ID2, stuff4, stuff5
line5: stuff, stuff2, stuff3, ID2, stuff4, stuff5
...
</code></pre>
<p>在这个虚拟行中,1-3行属于实体ID1,第4-5行属于ID2。我想把每一行都当作字典来读,然后把它们嵌套到一个包含IDX所有字典的字典中(例如,一个ID1字典,分别有3个第1-3行的嵌套字典)。在</p>
<p>更具体地说,我想定义一个函数:</p>
<ol>
<li>打开文件</li>
<li>将实体ID1的所有行(但仅)读入各个字典</li>
<li>返回包含ID1行嵌套字典的字典</li>
</ol>
<p>我希望稍后能够再次调用函数,以便在下一个字典中读取以下标识符(ID2)和后面的ID3等的所有行。我遇到的一个问题是,我需要在每一行中测试当前行是否仍带有感兴趣的ID或已经是新的ID。如果它是一个新的,我当然可以停止并返回字典,但是在下一轮(比如,ID2),ID2的第一行已经被读过了,因此我似乎失去了那一行。在</p>
<p>换言之:我希望在遇到一个具有新ID的行时,以某种方式重置函数中的计数器,以便在下一次迭代中使用新ID的第一行不会丢失。在</p>
<p>这似乎是一个很简单的任务,但我想不出一个优雅的方法。目前,我在函数之间传递一些“内存”标志/变量,以便跟踪新ID的第一行是否已经在上一次迭代中被读取。这是相当庞大和容易出错的。在</p>
<p>谢谢你的阅读。。。任何想法/提示都将受到高度赞赏。如果有些地方不清楚,请询问。在</p>
<p>这是我的“解决方案”。从它正确打印字典的意义上来说,它似乎起到了作用(尽管我确信有一种更优雅的方法可以做到这一点)。
我还忘了提到文本文件非常大,因此我想按ID处理它,而不是将整个文件读入内存。在</p>
^{pr2}$