擅长:python、mysql、java
<p>@PanagiotisKanavos正确地猜测<code>html.unescape</code>能够用unicode字符替换xml char引用。最困难的部分是,一些ref以其终止分号(<code>;</code>)正确结束,而其他ref则不是。在后一种情况下,如果一个实体后跟分号<strong>分隔符<strong>,则该分隔符将被转换吃掉,并移动以下字段。你知道吗</p>
<p>因此,唯一可靠的方法是:</p>
<ol>
<li>用<code>;</code>分隔符将文件作为CSV文件逐行处理</li>
<li>最后从第二个开始到第四个结束时,中间的场地被打断</li>
<li>把中间的那块地翻出来</li>
</ol>
<p>如果要转换文件,可以执行以下操作:</p>
<pre><code>with open('file.csv') as fd, open('fixed.csv', 'w', newline='') as fdout:
rd = csv.reader(fd, delimiter=';')
wr = csv.writer(fdout, delimiter=';')
for row in rd:
if len(row)> 5:
row[1] = ';'.join(row[1:len(row)-3])
del row[2:len(row)-3]
row[1] = html.unescape(row[1])
wr.writerow(row)
</code></pre>
<p>如果只想构建从字段0到字段2的映射:</p>
<pre><code>values = {}
with open('file.csv') as fd:
rd = csv.reader(fd, delimiter=';')
for row in rd:
values[field[0]] = field[-3]
</code></pre>