回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>这是在使用Python3</p>
<p>所以,这段代码运行得很好(注意,在发布到这里之前,我已经更改了文件名)。我在一个非常大的文件上运行它,所以将读取器转换为列表不是一个选项</p>
<pre><code>import csv
with open("file.csv", 'r') as q:
with open("file2.csv", 'w+', newline='') as w:
qreader = csv.reader(q, delimiter=',')
writer = csv.writer(w)
i=0
for row in qreader:
if i == 0:
header = ['ID', 'Number', 'Address', 'City', 'County Code', 'County', 'Zip']
writer.writerow(header)
i += 1
else:
writer.writerow(row)
</code></pre>
<p>这很有效。我在这里所做的就是修复头文件,否则就保持文件完全相同</p>
<p>然后我尝试将文件拆分,这样我就可以在excel中按字母顺序操作各个部分,避免拆分同一条街上的记录(因此我要按地址的第一个字母进行拆分)</p>
<pre><code>import csv
with open("readfile.csv", 'r') as r, open("writefile1.csv", 'w+', newline='') as v1, open("writefile2.csv", 'w+', newline='') as v2, open("writefile3", 'w+', newline='') as v3, open("writefile4.csv", 'w+', newline='') as v4, open ("writefile5.csv", 'w+', newline='') as v5, open ("writefile6.csv", 'w+', newline='') as v6, open ("writefile7.csv", 'w+', newline='') as v7, open ("writefile8.csv", 'w+', newline='') as v8:
reader = csv.reader(r)
writerv1 = csv.writer(v1)
writerv2 = csv.writer(v2)
writerv3 = csv.writer(v3)
writerv4 = csv.writer(v4)
writerv5 = csv.writer(v5)
writerv6 = csv.writer(v6)
writerv7 = csv.writer(v7)
writerv8 = csv.writer(v8)
for row in r:
if i == 0:
nrow.append(row)
writerv1.writerow([row])
writerv2.writerow([row])
writerv3.writerow([row])
writerv4.writerow([row])
writerv5.writerow([row])
writerv6.writerow([row])
writerv7.writerow([row])
writerv8.writerow([row])
i += 1
else:
try:
if row[2][0]<='B':
writerv1.writerow([row])
elif row[2][0]<='D':
writerv2.writerow([row])
elif row[2][0]<='G':
writerv3.writerow([row])
elif row[2][0] <= 'L':
writerv4.writerow([row])
elif row[2][0] <= 'O':
writerv5.writerow([row])
elif row[2][0] <= 'R':
writerv6.writerow([row])
elif row[2][0] <= 'U':
writerv7.writerow([row])
else:
writerv8.writerow([row])
except:
writerv1.writerow([row])
</code></pre>
<p>如果我没有[]中的行,它会为每一列输出一个字母。如果我把行放在[]中,它会把每一列放在第一列中,用逗号分隔</p>
<p>我不明白为什么我的第一个代码没有问题,现在我有问题了。我没有注意到任何差异</p>
<p>通过运行一些测试,我注意到row.split(“,”)在打印时不会将行作为列表输出。所以我几乎什么都试过了</p>
<p>编辑:我应该提到我启动csv.reader时使用了分隔符=','。我原以为这会保证这一行会被解读为一个列表。我把它拿走了,好像没什么区别</p>
<p>编辑:回答了我自己的问题。应该提到的是,我在将数据放入正确的卷时也遇到了问题。这一切都进入了第一个书面文件,其他文件都没有。在为循环的每个实例创建<code>nrow</code>列表之后,我必须将条件语句更改为<code>nrow[2][0]</code></p>