擅长:python、mysql、java
<p>我不知道你在用'a+r+b'文件模式读写同一个文件,所以不会提供完整的代码片段,但这里有一个简单的方法,可以跳过你正在读的文件中任何包含NUL字节的行,不管是最后一行、第一行还是中间一行。</p>
<p>诀窍是要意识到文档中说<code>csv.writer()</code>“的csvfile参数可以是任何支持<em>迭代器</em>协议的对象,并且每次调用其<code>next()</code>方法时都返回一个字符串。”这意味着您可以用这样定义的简单过滤器迭代器函数替换调用中的文件参数:</p>
<pre><code>def filter_nul_byte_lines(a_file):
for line in a_file:
if '\x00' not in line:
yield line
</code></pre>
<p>使用方法与此类似:</p>
<pre><code>dcsv = open('Pnl.csv', 'rb+')
cReader = csv.reader(filter_nul_byte_lines(dcsv))
for row in cReader:
print row
</code></pre>
<p>这将导致在读取文件时忽略任何包含NUL字节的行。此外,这项技术在读取每一行时都能动态工作,因此不需要一次将整个文件读入内存或提前对其进行预处理。</p>