2016-06-15 11 views
0

Um eine kurze Geschichte kurz zu machen, ich schreibe ein Python-Skript, das den Benutzer auffordert, eine .docx-Datei zu löschen und die Datei in .txt konvertiert. Python sucht nach Schlüsselwörtern in der TXT-Datei und zeigt sie der Shell an. Ich stieß auf UnicodeDecodeError codec charmap etc ..... Ich überwand das, indem ich innerhalb meiner for-Schleife "word.decode (" charmap ") schrieb. JETZT zeigt Python die Schlüsselwörter nicht an, die es zur Shell findet. Irgendwelche Ratschläge auf ?, wie dies zu überwinden Vielleicht Python durch die Zeichen überspringen haben kann es nicht entschlüsseln und weiter durch den Rest zu lesen Hier ist mein Code:Python Unicode-Probleme mit TXT-Datei

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() 

und die Ausgabe:

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

Versuchen Sie folgendes: 'word.decode ('utf-8', Fehler = 'ignorieren')' – vrs

+0

Dank, immer noch nicht ausgegeben etwas unter Keywords. Ich habe diese Datei selbst durchgelesen und es gibt sicher Schlüsselbegriffe, die von meinem Programm erkannt werden sollten. Es funktioniert für die anderen paar Dateien, die ich gescannt habe. Vielleicht unterbrechen diese nicht decodierbaren Zeichen den Lesevorgang? –

+0

Warum passierst du '' charmap '' '' ''? Können Sie eine kleine Textprobe bereitstellen, die das Problem reproduziert? –

Antwort

-1

In Ordnung, ich habe es herausgefunden. Hier ist mein Code, aber ich probierte eine docx-Datei, die komplexer zu sein schien und wenn sie in .txt umgewandelt wurde, bestand die gesamte Datei aus Sonderzeichen. Jetzt denke ich, dass ich zum python-docx-Modul gehen sollte, da es sich um XML-Dateien wie Word-Dokumente handelt. Ich fügte hinzu, "encoding = 'charmap'"

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

Vielleicht den Code veröffentlicht Herstellung die Rückverfolgung wäre einfacher zu beheben.

Ich bin mir nicht sicher ist das einzige Problem, vielleicht würde dies besser funktionieren:

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

Traceback (jüngste Aufforderung zuletzt): Datei "C: \ Benutzer \ Benutzer \ Desktop \ ResumeScan.py", Zeile 12, in file_words.append (word.decode ("charmap")) Attribute: ‚str 'object hat kein Attribut' decode ' –

+0

Ich glaube nicht, dass Python 3.5.1 "decode()" wie Python 2.7 tut –

+0

words.decode (encoding =' UTF-8 ', errors =' strict ') # annimmt, UTF -8 NFC-Eingang – thomas

1

In Python 3, öffnen Sie keine Textdateien im Binärmodus. Der Standardwert ist die Datei in Unicode entschlüsseln locale.getpreferredencoding(False) (cp1252 auf US Windows):

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

oder eine Codierung angeben:

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

Sie Notwendigkeit tun die Codierung der Datei kennen. Es gibt andere Optionen zu open auch, einschließlich errors='ignore' oder errors='replace', aber Sie sollten keine Fehler erhalten, wenn Sie die richtige Codierung kennen.

Wie andere bereits gesagt haben, würde die Veröffentlichung eines Beispiels Ihrer Textdatei, die den Fehler und die Fehlerrückverfolgung reproduziert, helfen, Ihr spezifisches Problem zu diagnostizieren.

+0

Wenn ich" charmap "und" ISO- 8859-1 "sie geben keine Fehler, aber Python hört auf, die Datei zu lesen. Die Verwendung von "utf-8" gibt mir Fehler. Hier ist das Beispiel, das ich in einem der früheren Kommentare zur Verfügung gestellt habe: þÿ Ï þÿ \t þÿÿÿ þÿÿÿ ‰ –

+0

@E_R, das ist keine codierte Textdatei. Warum denkst du kannst du es entschlüsseln? Einige Codepage-Decodierungen wie ISO-8859-1 übersetzen die 256 möglichen Bytes in 256 mögliche Unicode-Zeichen. Es wird nie fehlschlagen zu konvertieren, aber wenn die Datei nicht im ISO-8859-1-kodierten Format zu Beginn war, bekommen Sie nur Müll. –