在循环中继续读取行,即使行中有空值

0 投票
1 回答
563 浏览
提问于 2025-04-16 20:21

我在循环中读取csv文件。问题是,有些csv文件里插入了NULL值,当for循环读取到这些行时,就会报错。

我的代码是:

    reader = csv.reader(f, delimiter=';',quotechar = '"')
    data = StringIO.StringIO()
        for line in reader:
            data.write("\"" + str(line[i].encode('UTF-8')) + "\"")
                     .......


and the error is :

for line in reader: _csv.Error: line contains NULL byte

如果我使用了"try and except",一旦遇到NULL值,它就会进入except部分,然后就不再继续读取文件中的其他行了。而我希望for循环能够跳过NULL值,继续读取文件中的其他行。

我的示例数据是:

"a";"b";"c"
 NulNulNul "f";"v";"x"
 "aaa";"fb";"a"
 "abb";"aab";"aac"

我希望for循环结束后得到的数据是:

 "a";"b";"c"
 "f";"v";"x"
 "aaa";"fb";"a"
 "abb";"aab";"aac"

1 个回答

2
reader = csv.reader( (line.replace('\0','') for line in f) , delimiter=';',quotechar = '"')

这段话的意思是,这个操作会在csv.reader处理这些行之前,把行中的空值去掉。

撰写回答