<p>我的方法是读取CSV两次。第一步,我收集相关信息,第二步,输出:</p>
<pre><code>import csv
# Pass 1: gather related materials
with open('EGLOINDOORCSV.csv') as csvfile:
reader = csv.reader(csvfile)
related = {}
for row in reader:
material = row[0]
serial = row[1]
related.setdefault(serial, set()).add(material)
# print(related) # for debugging
# Pass 2: print
with open('EGLOINDOORCSV.csv') as csvfile:
reader = csv.reader(csvfile)
for row in reader:
material = row[0]
serial = row[1]
print('%s | %s | %s' % (material, serial, '///'.join(sorted(related[serial]))))
</code></pre>
<p>输出:</p>
<pre><code>ExOne | GroupOne | ExOne///ExThree///ExTwo
ExTwo | GroupOne | ExOne///ExThree///ExTwo
ExThree | GroupOne | ExOne///ExThree///ExTwo
ExFour | GroupTwo | ExFive///ExFour
ExFive | GroupTwo | ExFive///ExFour
ExSix | GroupThree | ExSix
</code></pre>
<h2>注意事项</h2>
<ul>
<li><p>我假设你的CSV文件没有头。如果这样做,则需要跳过:</p>
<pre><code>reader = csv.reader(csvfile)
next(reader) # Skip the header, then move on
</code></pre></li>
<li>根据您提供的CSV,我将<code>row[0]</code>分配给<code>material</code>,请调整索引号以匹配您的文件</li>
</ul>
<h2>关于<code>related</code>字典</h2>
<p>这本字典是我保存关系的地方,它看起来像这样:</p>
<pre><code>{
"GroupTwo": set(["ExFour", "ExFive"]),
"GroupOne": set(["ExOne", "ExThree", "ExTwo"]),
"GroupThree": set(["ExSix"])
}
</code></pre>
<p>在我的代码中,声明:</p>
<pre><code> related.setdefault(serial, set()).add(material)
</code></pre>
<p>是以下的缩写:</p>
<pre><code> if serial not in related:
related[serial] = set()
related[serial].add(material)
</code></pre>