Python读取CSV替换NULL字节的自定义方案失效原因求解
你的代码失效的核心原因有两个
- 第一个问题:Python的字符串是不可变类型,
str.replace()方法不会修改原字符串,只会返回替换后的新字符串。你的代码里只写了line.replace('\0',''),没有用变量接收返回值,相当于这行替换操作完全没有生效,处理后的字符串直接被丢弃了。 - 第二个问题:就算你加了变量接住替换结果,你遍历文件对象的操作只是在内存里处理了每行的临时值,完全没有修改磁盘上的原文件内容。你调用
f.seek(0)重置文件指针后,csv.reader(f)读的还是源文件里带NULL字节的原始内容,自然达不到预期效果。
原方案能生效的原理
原方案用生成器表达式(x.replace('\0','') for x in f),把每一行实时替换后的新字符串直接传给csv.reader,相当于reader读取的是处理后的内存数据,不需要修改原文件,也不需要重置文件指针,所以可以正常运行。
内容的提问来源于stack exchange,提问作者DominiqueNobody
相关产品推荐
相关产品推荐

