Я не уверен, что вы делаете с файлом «a + r + b» и читаете и записываете в тот же файл, поэтому не будете предоставлять полный фрагмент кода, но вот простой способ пропустить любой строки, содержащие в них NUL-байт в файле, который вы читаете, будь то последний, первый или один в середине, который читается.
Хитрость заключается в том, чтобы понять, что документы говорят csvfile аргумент в csv.writer()
«может быть любой объект, который поддерживает итератора протокол и возвращает строку каждый раз, когда его метод 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 в них игнорируются при чтении файла. Кроме того, этот метод работает «на лету», когда считывается каждая строка, поэтому не требуется сразу считывать весь файл в память или предварительно перерабатывать его заранее.
Возможно, у вас есть файл NUL в вашем файле? – Thomas
Я не думаю, что в любом случае это будет делать то, что вы хотите. 'row [: - 1]' даст вам текущую строку без последнего элемента. Он не даст вам всех строк, кроме последнего. Другими словами, это удаляет последнюю _column_, а не последнюю строку. – octern
Кроме того, какая строка в скрипте дает вам ошибку? – octern