我目前正在做一个构建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文件并按字符读取内容?
答案 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模块混淆,请更改其他名称并再次尝试。