通过csv逐字符遍历
问题描述:
我目前正在做一个练习,构建一个python CSV解析器。我需要能够打开一个CSV文件并读取内容,逐个字符地遍历CSV。我的python代码设置为遍历字符串,但是我遇到了通过CSV执行此操作的错误。通过csv逐字符遍历
Read方法:
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文件并读取内容字符?
答
一个基本上是文本文件的CSV文件,我会说你应该把它看作一个普通的文本文件......换句话说,如果你想构建自己的解析器,你不应该使用现有的解析器。 ..
with open(filename) as f:
for l in f:
for c in l:
pass # your c-by-c processing here
注意,在“逗号分隔值”常规列分隔符(CSV)格式是逗号......但是,有时(大部分的实际时间),它是一个标签,半-colon或其他一些字符...在解析时注意这一点...关于行,“行尾字符”(EOL)取决于文件的编码(* nix上的标准是\n
,在Mac上是\r
,在Windows上是\r\n
)
+0
谢谢@cedbue这为我工作!感谢您的意见。当我构建我自己的解析器时,尝试使用csv模块真是太愚蠢了! – Paul
答
这可能是因为您将参数csv
命名为参数csv
,这会将计算机与csv模块混淆,更改其他名称并再次尝试。
嗯,你不能只是打开它作为一个普通的文本文件?如果你想逐字读字符,你不应该关心csv模块 – cedbeu
你的变量叫'csv'与模块名'csv'冲突。改变它不同的东西。 –
这就是错误的原因,但是@cedbeu说,如果你想自己解析它,你不应该使用'csv'。 –