今天我发现了一个脚本,它帮助我做了最多的工作,将我的gtk2脚本更改为gtk3: https://git.gnome.org//browse/pygobject/tree/pygi-convert.sh
但也有一个从未使用Gtk的脚本停止工作。这只是因为"import gtk"已经不在脚本中了。
我现在尝试了一些事情来让它工作,没有"导入gtk",但无法使它运行。
为什么gtk改变我的编码?
是从ebay germany下载的csv文件,编码为'iso-8859-15'/'latin'。
我不明白为什么这段代码只在gtk import:
下工作#!/usr/bin/env python
# -*- coding: utf8 -*-
import gtk
import csv
import codecs
csv_reader = csv.DictReader(codecs.open(CSV_FILE, "r", encoding='iso-8859-15'), delimiter=';')
for row in csv_reader:
pass
不带"import gtk":
Traceback (most recent call last):
File "import_csv_ebaysales.py", line 9, in <module>
for row in csv_reader:
File "/usr/lib/python2.7/csv.py", line 107, in next
self.fieldnames
File "/usr/lib/python2.7/csv.py", line 90, in fieldnames
self._fieldnames = self.reader.next()
UnicodeEncodeError: 'ascii' codec can't encode character u'xe4' in position 45: ordinal not in range(128)
我使用的是Ubuntu 14.04
主要问题是,我想使用使用DictReader,当我使用没有"import gtk"我必须使用键以这种方式:
print row["Name des Käufers".decode("utf8").encode("latin")]
如果我"import gtk",我可以这样使用:
print row["Name des Käufers"]
我让它工作的唯一方法是首先将csv文件转换为utf8。
#!/usr/bin/env python
# -*- coding: utf8 -*-
CSV_FILE = "EBAY_CSV/ebaycsvfile.csv"
CSV_FILE_UTF8 = "/tmp/utf8_ebay_csvfile.csv"
import csv
import codecs
with open(CSV_FILE) as infile:
with codecs.open(CSV_FILE_UTF8, "wb", encoding="utf8") as outfile:
inlines = [inline.decode("latin") for inline in infile.readlines()]
outfile.writelines(inlines)
csv_reader = csv.DictReader(open(CSV_FILE_UTF8), delimiter=';')
for row in csv_reader:
print row["Name des Käufers"]
您的文件中似乎有latin-1
编码字符。将encoding='iso-8859-15'
改为encoding='latin-1'
可以解决这个问题。