逐个字符地迭代csv

时间:2016-03-05 07:48:59

标签: python csv

我目前正在做一个构建python CSV解析器的练习。我需要能够打开CSV文件并读取内容,逐个字符地迭代CSV。我的python代码设置为遍历字符串但是我遇到了通过CSV执行此操作的错误。

阅读方法:

import csv
def parse(csv):
    #states
    is_token = False
    previous_character_is_escape = False
    no_quote_value = False

    csv_file = open(csv, 'r')
    iterator = (csv.reader(csv_file))

    for i in iterator:
        if is_token == False:
            if i == '"':
                print '\b' + i,
                is_token = True
                no_quote_value = False
            elif i == ',':
                print '\n',
            elif no_quote_value == True:
                print '\b' + i,
                is_token = True
            else:
                print '\b' + i,


        elif is_token == True:
            if i == '\\':
                print '\b' + i,
                previous_character_is_escape = True
            elif previous_character_is_escape == True and i == '"':
                print '\b' + i,
                previous_character_is_escape = False
            elif previous_character_is_escape == False and i == '"':
                print '\b' + i,
                is_token = False
                no_quote_value = True
            elif no_quote_value == True and i == ',':
                print '\n',
                is_token = False
            elif no_quote_value == False and i == ',':
                print '\b' + i,
            else:
                print '\b' + i,

parse('example.csv')

当我执行此操作时,我收到以下错误:

Traceback (most recent call last):
  File "main_test.py", line 47, in <module>
    parse('example.csv')
  File "main_test.py", line 10, in parse
    iterator = (csv.reader(csv_file))
AttributeError: 'str' object has no attribute 'reader'

有没有办法打开CSV文件并按字符读取内容?

2 个答案:

答案 0 :(得分:2)

CSV文件基本上是一个文本文件,我想你应该把它作为常规文本文件阅读......换句话说,如果你想构建自己的解析器,你不应该使用现有的解析器。

with open(filename) as f:
    for l in f:
        for c in l:
            pass # your c-by-c processing here

注意,常规列分隔符以&#34;逗号分隔值&#34; (CSV)格式是一个逗号...但是,有时(实际上大部分时间),它是一个标签,一个分号或其他一些字符......在解析时要小心这一点......关于行,&#34;行尾字符&#34; (EOL)取决于文件的编码(* nix上的标准为\n,Mac上为\r,Windows为\r\n

答案 1 :(得分:0)

这可能是因为您将参数命名为csv,这会使计算机与csv模块混淆,请更改其他名称并再次尝试。