2011-12-24 8 views
0

私はQtデザイナーを使ってpyファイルを持っています。私はコンボボックスを持っていて、csvファイルから読みました。コンボボックスの選択肢がファイルにあれば、何かが印刷されます。 # -*- coding: utf-8 -*-PyQt:どのエンコーディングが使用されているかをどのように把握しますか?

だから、私が手にエラーがこれです:

PyQt4.QtCore.QString(u'choice') is not in list 

チョイス」はそのエンコーディングを信じlist.Iにはもちろんであるが、それと言うスクリプトの先頭に

問題ですが、それだけです。

u'choice 'は文字列であり、リストには文字列が含まれています。

これは私がリストに項目を追加する方法です:

import csv 
list1=csv.reader(open('file.csv', "rb")) 
list2=[] 
for i in list1: 
    list2.append(i) 

任意のアイデアのおかげ?。

+0

PyQt4.QtCore.QString(u'choice ')の値は何ですか? 'list'とは何ですか(おそらく組み込みの型リストではありません)?あなたが持っている正確なエラーメッセージは何ですか?実行していたコード行は何ですか? –

+0

リストに値を追加するスニペットを貼り付けます – soulcheck

答えて

0

これはエンコードとは関係ありません。

エラーがない文字列がCSVファイルから読み取るリストに存在しないという理由だけで起こる:

>>> import csv 
>>> with open('tmp.csv', 'wb') as stream: 
...  csv.writer(stream).writerow(['choice']) 
... 
>>> lst = [] 
>>> with open('tmp.csv', 'rb') as stream: 
...  for row in csv.reader(stream): 
...   lst.append(row) 
... 
>>> from PyQt4.QtCore import QString 
>>> s = QString(u'choice') 
>>> lst.index(s) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: PyQt4.QtCore.QString(u'choice') is not in list 
>>> lst 
[['choice']] 
>>> lst[0].index(s) 
0 

CSVリーダーは、ファイル内の各行に対してストリングのリストを返します。

+0

list2は文字列のリストです。文字列のリストではありません。もしそれが意味するのであれば、リスト2には文字列がありません。私はここで少し失われています。 – GiannisIordanou

+0

あなたのコードでは、 'list1'は' csv.reader'です。これはcsvファイルを行ごとに解析するファイルのようなオブジェクトです。 'for'ループでは、' i'は行を表す文字列のリストになります。したがって、 'list2'は_lists_の文字列を含むリストになります。したがって、 'list2'には文字列はなく、(文字列の)リストだけです。もちろん、私の推論はあなたの質問に投稿したコードに完全に基づいています - あなたの_real_コードが異なる場合、私の推論は間違っています。 – ekhumoro

+0

それはエンコードの問題ではないことが分かりました、私は間違ったリストを使用していました。 – GiannisIordanou

関連する問題