首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Python读取/编码CSV文件中的中文字符

问用Python读取/编码CSV文件中的中文字符
EN

Stack Overflow用户
提问于 2015-12-11 16:56:13
回答 3查看 5.4K关注 0票数 2

我正在尝试读取一个包含简体中文信息的CSV文件,并将其编码为请求放入数据库中。

我的代码部分:

代码语言:javascript
复制
#coding:utf-8    
import csv, sys, urllib, urllib2

with open('testdata1.csv', 'rU') as f:
    reader = csv.reader(f)
    try:
        z = csv.reader(f, delimiter='\t')
        for row in reader:
            print row[0]
            if row[0] in (None, ""): 
                continue
            elif row[0] == '家长姓': 
                print row[0]

然而,我遇到了两个问题:

1) Sublime Text无法识别中文字符,也就是它无法理解在命令elif row[0] == '家长姓'中查找'家长姓‘。

2) Sublime Text似乎不能打印中文字符(当我告诉它打印某些信息时,所有的中文字符都被下划线取代)。

我已经尝试了File>Save with Encoding>UTF-8,但没有效果。任何帮助都将不胜感激。

EN

回答 3

Stack Overflow用户

发布于 2015-12-11 17:00:47

尝试使用适当编码的codecs打开文件:

代码语言:javascript
复制
>>> import codecs
>>> f = codecs.open("testdata1.csv", "r", "utf-8") 
票数 1
EN

Stack Overflow用户

发布于 2015-12-11 18:15:57

非ASCII字符总是很难使用,因为有3个不同的问题:

  • 系统和编辑器必须能够显示它们
  • 必须指定源文件的编码(第一行或第二行中的# -*- coding: ... -*-)
  • 以上所有内容都独立于系统编码(将用于呈现它们的代码)<sys.encoding>F29>

首先,您的代码行忘记了-*-,这意味着一些编辑器可能无法正确处理编码。

您也可以尝试空闲编辑器是否更容易处理中文字符。

但不管怎样,如果其他方法都失败了,你总是可以使用显式的unicode代码:

代码语言:javascript
复制
>>> txt = u'家长姓' # only works if editor and interpretor were correctly declared the source encoding
>>> txt2 = u'\xe5\xae\xb6\xe9\x95\xbf\xe5\xa7\x93' # works on any system
>>> txt == txt2
True

TL/DR:如果在Python源代码中使用非ASCII字符有问题,请使用它们的转义代码

票数 1
EN

Stack Overflow用户

发布于 2017-06-27 10:53:35

您代码中的'家长姓'是一个<type 'str'>,您从其中读取的内容也是一个<type 'str'>,但可能它们的编码方法不是same.You可以在比较之前将它们解码为<type 'unicode'>。

例如:

代码语言:javascript
复制
row[0].decode('utf-8') == u'家长姓'

下面是一个关于str和unicode的测试:

代码语言:javascript
复制
test = '你好'
test1 = u'你好'
print type(test)
print type(test1)
print test == test1
print type(test.decode('utf-8'))
print test.decode('utf-8') == test1

输出:

代码语言:javascript
复制
<type 'str'>
<type 'unicode'>
False
<type 'unicode'>
True
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34219505

复制
相关文章

相似问题

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