繁体   English   中英

使用csv模块写入文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM