2016-06-15 3 views
0

長い話を簡単にするために、ユーザーに.docxファイルをドロップするように求めるPythonスクリプトを作成しています。このファイルは.txtに変換されます。 Pythonは.txtファイル内のキーワードを探し、それらをシェルに表示します。私はUnicodeDecodeErrorコーデックのcharmapなどを実行していました。私はforループ内に "word.decode(" charmap ")を書くことでそれを克服しました。現在、Pythonはシェルにあるキーワードを表示していません。 ??Python Unicodeの.txtファイルの問題

import sys 
import os 
import codecs 

filename = input("Drag and drop resume here: ") 
keywords =['NGA', 'DoD', 'Running', 'Programing', 'Enterprise', 'impossible', 'meets'] 
file_words = [] 

with open(filename, "rb") as file: 
     for line in file: 
      for word in line.split(): 
       word.decode("charmap") 
       file_words.append(word) 

comparison = [] 

for words in file_words: 
    if words in keywords: 
     comparison.append(words) 

def remove_duplicates(comparison): 
    output = [] 
    seen = set() 
    for words in comparison: 
     if words not in seen: 
      output.append(words) 
      seen.add(words) 
    return output 

comparison = remove_duplicates(comparison) 
print ("Keywords found:",comparison) 

key_count = 0 
word_count = 0 

for element in comparison: 
    word_count += 1 
for element in keywords: 
    key_count += 1 

Threshold = word_count/key_count 

if Threshold <= 0.7: 
    print ("The candidate is not qualified for") 
else: 
    print ("The candidate is qualified for") 

file.close() 

そして出力:

Drag and drop resume here: C:\Users\User\Desktop\Resume_Newton Love_151111.txt 
Keywords found: [] 
The candidate is not qualified for 
+0

を追加し、これを試してみてください: 'word.decode' – vrs

+0

おかげで、まだキーワードの下に何も出力はしません( 'UTF-8'、エラーが= '無視します')。私はこのファイルを読んできましたが、私のプログラムで認識されるはずのキーワードがあります。それは私がスキャンしたファイルの他のカップルのために働く。たぶん、それらの非デコード可能な文字が読み込みプロセスを中断するでしょうか? –

+0

'' charmap "'を 'decode'に渡すのはなぜですか?問題を再現するテキストの小さなサンプルを提供できますか?ここ –

答えて

-1

申し訳ありません。ここで私のコードですが、私は複雑なように見えるdocxファイルを試しました.txtに変換すると、ファイル全体が特殊文字で構成されていました。だから私はWord文書のようなxmlファイルを扱うので、私はpython-docxモジュールに行くべきだと思っています。私は、 "エンコーディング= 'のcharmap'"

with open(filename, encoding = 'charmap') as file: 
    for line in file: 
     for word in line.split(): 
      file_words.append(word) 
-1

は多分生産のコードを投稿し、これを克服する方法を多分Pythonはそれをデコードし、残りを読み続けることができない文字をスキップ持ってここに私のコードですトレースバックを修正するのが簡単になります。

with open(filename, "rb") as file: 
    for line in file: 
     for word in line.split(): 
      file_words.append(word.decode("charmap")) 
+0

トレースバック(最新の呼び出しの最後): ファイル "C:\ Users \ユーザーデスクトップ\ ResumeScan.py \ユーザー":「STR file_words.append(word.decode( "charmapの")) はAttributeErrorでは、ライン12、 'オブジェクトに属性がありません'デコード ' –

+0

Python 2.7のようにPython 3.5.1が "decode()"を取っているとは思わない –

+0

words.decode(encoding =' UTF-8 '、errors =' strict ')#仮定するUTF -8 NFC入力 – thomas

1

バイナリモードでは、テキストファイルを開かないでください。デフォルトでは、ファイルがlocale.getpreferredencoding(False)(米国Windows上cp1252)を使用してUnicodeにデコードします:

with open(filename) as file: 
    for line in file: 
     for word in line.split(): 
      file_words.append(word) 

やエンコーディングを指定します。

with open(filename, encoding='utf8') as file: 
    for line in file: 
     for word in line.split(): 
      file_words.append(word) 

あなたはあなたのファイルのエンコーディングを知る必要性を行う。 には他のオプションもあります。errors='ignore'またはerrors='replace'などがありますが、正しいエンコーディングが分かっていればエラーにはなりません。

他の人は、エラーとトレースバックを再現するテキストファイルのサンプルを投稿すると、特定の問題の診断に役立つとも言われています。

+0

"charmap"と "ISO- 8859-1 "はエラーは発生しませんが、Pythonはファイルの読み込みを中止します。 "utf-8"を使うとエラーが出る。ここで私は以前のコメントの一方に設けられたサンプルは、次のとおりです。ÐÏà¡はA> THY \tŠþÿÿÿ‰ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ –

+0

@E_Rを±、それは、エンコードされたテキストファイルではありません。なぜあなたはそれを解読できると思いますか? ISO-8859-1のようなコードページの一部のデコードでは、256個の可能なバイトを256個の可能なUnicode文字に変換します。変換に失敗することは決してありませんが、ファイルがISO-8859-1でエンコードされていない形式で始まっていれば、ごみを取得するだけです。 –

関連する問題