我试图从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很新。非常感谢任何人都可以帮助我使用此代码来使其工作。
提前谢谢你。 随
==== UPDATE ====
根据大家的回复,我修改了以下代码:
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字节'虽然我添加了try / except,但是如上所示,python已经被提升了。所以任何人都有建议处理这个问题并让代码继续下去?顺便说一句,我正在处理的csv文件超过2GB。
非常感谢,Sui
答案 0 :(得分:0)
如果这是整个代码,则在完成所有fpw.close()
操作后,您需要使用writer
关闭该文件。
您还可以尝试with
关键字,如official Python documentation