使用nonascii ch从csv文件中删除null

2024-09-25 00:28:20 发布

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

我有一个csv文件包含null。文件也有非ascii字符。我想要一个函数来处理这个文件的kindle
到目前为止,我试过几种方法,但都不管用 第一。我试图replace('\0', '')它适用于ascii文件,但不适用于cp1254
第二次我尝试了unicodesv模块,但它给了我Error: line contains NULL byte
第三次尝试,创建itr = (line.replace('\0') for line in fileObj),然后将生成器传递给unicodesv,但由于unicodesv中的self.reader.next()试图从生成器获取元素,但它存在编码问题。

对我来说,像死锁这样的问题我需要解决第一个问题,使我能够处理第二个问题,但要解决第一个问题,我必须得到第二个问题的工作。不知道如何处理这些问题。请帮忙。谢谢你

UnicodeEncodeError

with open(path, 'r') as f:
  itr = (line.replace('\0', '') for line in f)
  csv.DictReader(itr)

Error: line contains NULL byte

^{pr2}$

UnicodeEncodeError

with io.open(path, 'r', encoding=''cp1254) as f:
  itr = (line.replace('\0', '') for line in f)
  csv.DictReader(itr)

Tags: 文件csvinforlineasciierrorbyte
1条回答
网友
1楼 · 发布于 2024-09-25 00:28:20

使用一个嵌入的空字符和一个来自cp1254的字符(在utf-8中无效)测试Python 3解决方案:

import csv

# create test file
lines = ['a,b,c,d,e', 
    '1,2,"3,000.26",\u00CExx,5',
    '6,7\x00,800.08,aaa,10']
with open('test.csv', 'w', encoding='cp1254', newline='') as f:
    for line in lines:
        f.write(line + '\r\n')

# solution
with open('test.csv', 'r', encoding='cp1254', newline='') as f:
    reader = csv.DictReader(line.replace('\0', '') for line in f)
    # print rows to show it works
    for row in reader:
        print(row)

输出

^{pr2}$

相关问题 更多 >