[英]Using csv module to write file
我正在尝试从csv文件中提取序列号(即公交车站的数量)并写入新的csv文件。 这些序列号通常采用以下格式:“公交车站皇后街-平台A3 [BT000998]”。 我只需要括号内的内容。 我发现在某些情况下存在不必要的逗号(如上面的示例),并且使用csv模块可以避免此类问题。 为了做到这一点,我编写了以下代码:
import csv
import re
fp = open(r'C:\data\input.csv')
fpw = open(r'C:\data\output.csv','w')
data = csv.reader(fp)
writer = csv.writer(fpw)
for row in data:
line = ','.join(row)
lst = line.split(',')
try:
stop = lst[11] # find the location that contains stop number
extr = re.search(r"\[([A-Za-z0-9_]+)\]", stop) # extract stop number enclosed by brackets
stop_id = str(extr.group(1))
lst[11] = stop_id # replace the original content with the extracted stop number
writer.writerow(lst) # write in the output file (fpw)
except Exception, e: # this part is in case there is error such as AttributeError
writer.writerow(row)
运行此代码后,虽然没有引发错误,但仅生成一个空的csv文件。 我是python的新手。 非常感谢任何人都可以帮助我使用此代码以使其工作。
先感谢您。 i
====更新====
根据大家的答复,我将代码修改如下:
import csv
import re
fp = r'C:\data\input.csv'
fpw = r'C:\data\output.csv'
with open(fp, 'rb') as input, open(fpw, 'wb') as output:
for row in csv.reader(input):
try:
stop = row[11]
extr = re.search(r"\[([A-Za-z0-9_]+)\]", stop)
stop_id = str(extr.group(1))
row[11] = stop_id
repl_row = ','.join(row) + '\n'
output.write(repl_row)
except csv.Error:
pass
现在运行代码似乎可以正常工作。 但是,在运行过程中,出现了“行包含NULL字节”错误,并且python停止了,即使我如上所述添加了try / except。 那么有人建议处理此问题,让代码继续吗? 顺便说一句,我正在处理的csv文件超过2GB。
非常感谢Sui
如果这是整个代码,您需要关闭文件, fpw.close()
你与所有完成后writer
的操作。
您也可以尝试with
关键字,如官方Python文档中所述
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.