关于字符编码的Python问题

关于字符编码的Python问题,python,character-encoding,Python,Character Encoding,我正在开发一个程序,需要获取两个文件并合并它们,然后将联合文件作为新文件写入。问题是输出文件包含这样的字符\xf0,或者如果我更改了一些编码,结果类似于\u0028。输入文件以utf8编码。如何在输出文件上打印字符,如“è”或“ò”和“-” 我已经完成了以下代码: import codecs import pandas as pd import numpy as np goldstandard = "..\\files\file1.csv" tweets = "..\\files\\file

我正在开发一个程序,需要获取两个文件并合并它们,然后将联合文件作为新文件写入。问题是输出文件包含这样的字符
\xf0
,或者如果我更改了一些编码,结果类似于
\u0028
。输入文件以utf8编码。如何在输出文件上打印字符,如
“è”
“ò”
“-”

我已经完成了以下代码:

import codecs
import pandas as pd
import numpy as np


goldstandard = "..\\files\file1.csv"
tweets = "..\\files\\file2.csv"

with codecs.open(tweets, "r", encoding="utf8") as t:
    tFile = pd.read_csv(t, delimiter="\t",
                        names=['ID', 'Tweet'],
                        quoting=3)

IDs = tFile['ID']
tweets = tFile['Tweet']

dict = {}
for i in range(len(IDs)):
    dict[np.int64(IDs[i])] = [str(tweets[i])]


with codecs.open(goldstandard, "r", encoding="utf8") as gs:
    for line in gs:
        columns = line.split("\t")
        index = np.int64(columns[0])
        rowValue = dict[index]
        rowValue.append([columns[1], columns[2], columns[3], columns[5]])
        dict[index] = rowValue

import pprint
pprint.pprint(dict)
ndic = pprint.pformat(dict, indent=4)
f = codecs.open("out.csv", "w", "utf8")
f.write(ndic)
f.close()
这是输出的例子

   desired: Beyoncè
   obtained: Beyonc\xe9
您正在生成Python字符串文本,如下所示:

漂亮的打印有助于生成调试输出;对象通过
repr()
传递,以使不可打印和非ASCII字符易于识别和复制:

>>> import pprint
>>> value = u'Beyonc\xe9'
>>> value
u'Beyonc\xe9'
>>> print value
Beyoncé
>>> pprint.pprint(value)
u'Beyonc\xe9'
é
字符在拉丁-1范围内,不在ASCII范围内,因此它用在Python代码中使用时再次产生相同值的语法表示

如果要将实际字符串值写入输出文件,请不要使用
pprint
。在这种情况下,您必须自己设置格式

此外,pandas数据帧将保存ByTestRing,而不是unicode对象,因此此时仍有未编码的UTF-8数据

就我个人而言,我甚至不想在这里使用熊猫;您似乎想要编写CSV数据,因此我简化了您的代码,改为使用
CSV
模块,实际上我并不想在这里解码UTF-8(在这种情况下这是安全的,因为输入和输出都完全使用UTF-8):


请注意,您确实希望避免使用
dict
作为变量名;它屏蔽了内置的类型,我用了
推文

为什么你打印得很漂亮?这将生成表示,字符串表示将为任何不可打印或非ASCII码点生成转义序列(字面上为4个字符,其中两个为十六进制)。您好,感谢您的帮助,我注意到现在使用json.dump时,输出为\\u201c。对于打印,我将代码更改为:json.dump(unicode(dict),json文件,确保没有unicode它不会打印(错误)@ForceITA:
unicode(dict)
将通过首先调用对象上的
repr()
将整个字典转换为单个
unicode()
对象。你真的不想那样。我现在明白了问题所在,您正在使用
index=np.int64(列[0])
作为字典键,JSON要求您使用字符串作为键。@ForceITA:更新代码以首先将所有键转换为字符串。@ForceITA:另外,您正在将所有推文转换为
str()
,这可能会产生类似的问题;那一列是什么格式的?现在我正在看我填写的dict,在我的备忘录中,我有201c,所以我认为在打印之前的某个地方有问题。我会试着换钥匙
>>> import pprint
>>> value = u'Beyonc\xe9'
>>> value
u'Beyonc\xe9'
>>> print value
Beyoncé
>>> pprint.pprint(value)
u'Beyonc\xe9'
import csv

tweets = {}
with open(tweets, "rb") as t:
    reader = csv.reader(t, delimiter='\t')
    for id_, tweet in reader:
        tweets[id_] = tweet

with open(goldstandard, "rb") as gs, open("out.csv", 'wb') as outf:
    reader = csv.reader(gs, delimiter='\t')
    writer = csv.reader(outf, delimiter='\t')
    for columns in reader:
        index = columns[0]
        writer.writerow([tweets[index]] + columns[1:4] + [columns[5])