这是在使用Python3
所以,这段代码运行得很好(注意,在发布到这里之前,我已经更改了文件名)。我在一个非常大的文件上运行它,所以将读取器转换为列表不是一个选项
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)
这很有效。我在这里所做的就是修复头文件,否则就保持文件完全相同
然后我尝试将文件拆分,这样我就可以在excel中按字母顺序操作各个部分,避免拆分同一条街上的记录(因此我要按地址的第一个字母进行拆分)
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])
如果我没有[]中的行,它会为每一列输出一个字母。如果我把行放在[]中,它会把每一列放在第一列中,用逗号分隔
我不明白为什么我的第一个代码没有问题,现在我有问题了。我没有注意到任何差异
通过运行一些测试,我注意到row.split(“,”)在打印时不会将行作为列表输出。所以我几乎什么都试过了
编辑:我应该提到我启动csv.reader时使用了分隔符=','。我原以为这会保证这一行会被解读为一个列表。我把它拿走了,好像没什么区别
编辑:回答了我自己的问题。应该提到的是,我在将数据放入正确的卷时也遇到了问题。这一切都进入了第一个书面文件,其他文件都没有。在为循环的每个实例创建nrow
列表之后,我必须将条件语句更改为nrow[2][0]
看起来您正在迭代输入文件,而不是csv读取器
尝试将
for row in r
更改为for row in reader
,然后删除所有出现的row
周围的方括号。来自reader
的行也应该处理所有拆分、剥离和换行问题我没有意识到除了使用strip之外,我还需要将它放入“list()”中,比如
nrow = list(row.strip().split(','))
。因为我第一次尝试时最后一列标题掉了,并且在末尾打印出“\n”,所以我添加了.strip()以消除空白一开始我没有提到它,因为我非常专注于解决所有内容都属于同一列的问题,但另一个问题是,除了头以外的所有数据都将进入同一个文件。我现在明白为什么了。我还必须将条件更改为引用
nrow[2][0]
,即我的新列表(带有相应的元素和该元素的第一个字符),而不是引用row[2][0]
相关问题 更多 >
编程相关推荐