删除cs中的最后一行

2024-10-05 13:17:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图删除csv中的最后一行,但出现错误:_csv.Error: string with NUL byte

这就是我目前所拥有的:

dcsv = open('PnL.csv' , 'a+r+b')
cWriter = csv.writer(dcsv, delimiter=' ')
cReader = csv.reader(dcsv)
for row in cReader:
    cWriter.writerow(row[:-1])

我搞不懂为什么老是出错


Tags: csvstring错误witherroropenbytewriter
3条回答

我只需要用readlines()读取整个文件,弹出最后一行,然后用csv模块编写

import csv
f = open("summary.csv", "r+w")
lines=f.readlines()
lines=lines[:-1]

cWriter = csv.writer(f, delimiter=',')
for line in lines:
    cWriter.writerow(line)

这应该管用

import csv
f = open('Pnl.csv', "r+")
lines = f.readlines()
lines.pop()
f = open('Pnl.csv', "w+")
f.writelines(lines)

我不知道你在用'a+r+b'文件模式读写同一个文件,所以不会提供完整的代码片段,但这里有一个简单的方法,可以跳过你正在读的文件中任何包含NUL字节的行,不管是最后一行、第一行还是中间一行。

诀窍是要意识到文档中说csv.writer()“的csvfile参数可以是任何支持迭代器协议的对象,并且每次调用其next()方法时都返回一个字符串。”这意味着您可以用这样定义的简单过滤器迭代器函数替换调用中的文件参数:

def filter_nul_byte_lines(a_file):
    for line in a_file:
        if '\x00' not in line:
            yield line

使用方法与此类似:

dcsv = open('Pnl.csv', 'rb+')
cReader = csv.reader(filter_nul_byte_lines(dcsv))
for row in cReader:
    print row

这将导致在读取文件时忽略任何包含NUL字节的行。此外,这项技术在读取每一行时都能动态工作,因此不需要一次将整个文件读入内存或提前对其进行预处理。

相关问题 更多 >

    热门问题