0

私はpyQT4とnumpyでマルチプラットフォームアプリケーションを開発していますが、実際には私のLinuxシステム(Xubuntu 12.04)では動作しませんが、Windows 7ではうまく動作しているようです. PyQT4 クラス) :

def import_folder(self,abs_path,folder_list):
    for folder_i in folder_list:
        filenames = glob.glob("%s/%s/*.txt" %( abs_path,folder_i ))
        aa =list(filenames)[1]
        print filenames
        data_fichier = np.genfromtxt("%s" %(aa),delimiter=';',skip_header=35,usecols=[8])
        data_fichier2 = np.zeros((data_fichier.shape[0],))

そして、これは私が得るエラーです:

     data_fichier = np.genfromtxt("%s" %aa,delimiter=';',skip_header=35,usecols=[8])
     File "/usr/lib/python2.7/dist-packages/numpy/lib/npyio.py", line 1241, in genfromtxt
     fhd = iter(np.lib._datasource.open(fname, 'rbU'))
     File "/usr/lib/python2.7/dist-packages/numpy/lib/_datasource.py", line 145, in open
      return ds.open(path, mode)
     File "/usr/lib/python2.7/dist-packages/numpy/lib/_datasource.py", line 472, in open
found = self._findfile(path)
     File "/usr/lib/python2.7/dist-packages/numpy/lib/_datasource.py", line 315, in _findfile
     filelist += self._possible_names(self.abspath(path))
     File "/usr/lib/python2.7/dist-packages/numpy/lib/_datasource.py", line 364, in abspath
     splitpath = path.split(self._destpath, 2)
     UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 14: ordinal not in range(128)

「ファイル名」変数を出力しました:

   [u'/home/*****/Documents/Plate_test/Track-Arousal_experiment_24_06_13_track_1-Trial     2-7-Subject 1.txt', u'/home/*****/Documents/Plate_test/Track-Arousal_experiment_24_06_13_track_1-Trial     2-5-Subject 1.txt']

したがって、問題は Unicode モード (リスト要素の先頭にある "u") に起因します。そして、Linux システムでこの Unicode モードを取得する理由がまったくわかりません。それを削除して「通常」モードに切り替える方法を教えてください(用語については申し訳ありませんが、私は専門家ではありません)。(または私の問題に関する他のアイデア)。

(ちなみに、このメソッドを PyQT クラスを使用せずに単純な関数として起動した場合、うまく機能するので、それを疑っています。)

ありがとう、

レム

4

1 に答える 1

0

メソッドはデコードしようとするため、 a ではなく a をloadtxt期待しているようです。あなたの場合のグロブはユニコード文字列を返しているので、ファイル名をエンコードしてみてください:strunicode

filenames = map(str, filenames)

または

filenames = map(lambda f: f.encode('utf-8'), filenames)

あるいは:

def safe_str(s):
    if isinstance(s, unicode):
        return s.encode('utf-8')
    return s
filenames = map(safe_str, filenames)
于 2013-08-06T22:50:02.893 に答える