只能读取csv文件与导入gtk - Python - DictReader



今天我发现了一个脚本,它帮助我做了最多的工作,将我的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'可以解决这个问题。

最新更新