首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从包含unicode字符的csv文件导出数据

从包含unicode字符的csv文件导出数据
EN

Stack Overflow用户
提问于 2013-05-15 05:13:44
回答 3查看 1.6K关注 0票数 1

我想从包含unicode字符串的csv文件中导出数据。

以前,我尝试过一个Python脚本,它只适用于ASCII数据。但它也不支持unicode:

代码语言:javascript
代码运行次数:0
运行
复制
#! /usr/bin/env python
import csv
csv.register_dialect('custom',delimiter=','
                     doublequote=True,
                     escapechar=None,
                     quotechar='"',
                     quoting=csv.QUOTE_MINIMAL, skipinitialspace=False)
with open('input.csv') as ifile:
 data = csv.reader(ifile, dialect='custom')
 for record in data:
  for i, field in enumerate(record):
   print (" <field%s>" % i + field + "</field%s>" % i)

回溯(最近一次调用):用于数据中的记录:_csv.Error: line包含空字节

EN

回答 3

Stack Overflow用户

发布于 2013-05-15 06:09:25

改为使用此unicode-csv库。

https://github.com/jdunck/python-unicodecsv

代码语言:javascript
代码运行次数:0
运行
复制
import unicodecsv as csv

with open('input.csv') as ifile:
  rows = [row for row in csv.reader(ifile, encoding='utf-8')]

print rows
票数 2
EN

Stack Overflow用户

发布于 2013-05-15 07:22:00

您可以将csv.reader包装在类中,以便为您处理它。以下内容摘自csv文档示例并为我工作:

代码语言:javascript
代码运行次数:0
运行
复制
#! /usr/bin/env python
import csv, codecs

class UTF8Recoder:
    """
    Iterator that reads an encoded stream and reencodes the input to UTF-8
    """
    def __init__(self, f, encoding):
        self.reader = codecs.getreader(encoding)(f)

    def __iter__(self):
        return self

    def next(self):
        return self.reader.next().encode("utf-8")

class UnicodeReader:
    """
    A CSV reader which will iterate over lines in the CSV file "f",
    which is encoded in the given encoding.
    """

    def __init__(self, f, dialect=csv.excel, encoding="utf-8", **kwds):
        f = UTF8Recoder(f, encoding)
        self.reader = csv.reader(f, dialect=dialect, **kwds)

    def next(self):
        row = self.reader.next()
        return [unicode(s, "utf-8") for s in row]

    def __iter__(self):
        return self




csv.register_dialect('custom', delimiter=',',
                     doublequote=True,
                     escapechar=None,
                     quotechar='"',
                     quoting=csv.QUOTE_MINIMAL, skipinitialspace=False)

with open('input.csv') as ifile:
 data = UnicodeReader(ifile, dialect='custom')
 for record in data:
  for i, field in enumerate(record):
   print (" <field%s>" % i + field + "</field%s>" % i)

如果您需要该功能,也有一个UnicodeWriter类。

票数 1
EN

Stack Overflow用户

发布于 2013-05-15 08:07:09

似乎您正在使用Python3。

代码语言:javascript
代码运行次数:0
运行
复制
#!/usr/bin/env python3
import csv

with open('input.csv', newline='', encoding=encoding) as csvfile:
    reader = csv.reader(csvfile, dialect="custom")
    for row in reader:
        print(", ".join(row))

问题中的代码定义了“自定义”方言,而encoding是文件的字符编码,如"utf-16“。使用的是

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16557357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档