从Python

时间:2015-12-11 08:56:13

标签: python csv encoding utf-8

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

我的代码部分:

#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似乎无法打印中文字符(当我告诉它打印一些信息时,所有中文字符都被下划线替换)。

我已经尝试了文件>使用编码保存> UTF-8无效。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

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

>>> import codecs
>>> f = codecs.open("testdata1.csv", "r", "utf-8") 

答案 1 :(得分:1)

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

  • 系统和编辑器必须能够显示它们
  • 必须指定源文件的编码(第一行或第二行中为# -*- coding: ... -*-
  • 以上所有内容都与系统编码无关(sys.encoding将用于渲染它们

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

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

但无论如何,如果其他一切都失败了,你总是可以使用显式的unicode代码:

>>> 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字符时遇到问题,请使用其转义代码

答案 2 :(得分:1)

您的代码中的

'家长姓'<type 'str'>,您读取的内容也是<type 'str'>,但也许他们的编码方法不一样。您可以将它们解码为比较前<type 'unicode'>

例如:

row[0].decode('utf-8') == u'家长姓'

这是关于str和unicode的测试:

test = '你好'
test1 = u'你好'
print type(test)
print type(test1)
print test == test1
print type(test.decode('utf-8'))
print test.decode('utf-8') == test1

输出:

<type 'str'>
<type 'unicode'>
False
<type 'unicode'>
True