2016-07-25 35 views
0

Hier ist das Problem:codierten Text von Strings Entfernen von TXT-Datei lesen

BFLY - The CBOE S&P 500 Iron Butterfly Index BPVIX - CBOE/CME FX British Pound Volatility Index BPVIX1 - CBOE/CME FX British Pound Volatility First Term Structure Index BPVIX2 - CBOE/CME FX British Pound Volatility Second Term Structure Index

:

ich in eine txt-Datei von https://www.cboe.org/mdx/mdi/mdiproducts.aspx

Beispiel von Textzeilen diese gesamte Liste kopiert und eingefügt

Diese Linien natürlich normal erscheinen in meiner Textdatei, und ich sparte die Datei mit uTF-8-Codierung.

Mein Ziel ist es Python zu verwenden, nur die Symbole aus dieser langen Liste an Streifen aus, .e.g. BFLY, VPVIX etc, und schreibt sie in eine neue Datei

ich den folgenden Code verwende die Datei zu lesen und teilen Sie es:

x=open('sometextfile.txt','r') 
y=x.read().split() 

Das Problem ist, ich sehe, dass es knallen unbekannte Zeichen und sie beeinflussen meine Fähigkeit, die Liste zu filtern. Beispiel:

print(y[0]) 
BFLY 

Ich vermute, dass diese Charaktere etwas mit der Codierung zu tun, und ich habe ein paar verschiedenen Dinge mit dem Codec-Modul ohne Erfolg versucht. Die Verwendung von .decode ('utf-8') löst einen Fehler aus, wenn versucht wird, es mit den obigen Variablen x oder y zu verwenden. Ich kann .encode ('utf-8') benutzen, was die Dinge offensichtlich noch schlimmer macht.

Das Hauptproblem besteht darin, dass bei dem Versuch, die Liste zu durch Schleife und alle Elemente entfernen, die nicht alle Großbuchstaben sind oder enthalten nicht-alphabetische Zeichen. Beispiel:

y[0].isalpha() 
False 
y[0].isupper() 
False 

In diesem Beispiel wird das Symbol BFLY aus der Liste entfernt.

Das lustige daran ist, dass diese Zeichen in einer txt-Datei nicht vorhanden sind, wenn ich so etwas tun:

q=open('someotherfile.txt','w') 
q.write(y[0]) 

Jede Hilfe wäre sehr dankbar. Ich würde wirklich gerne verstehen, warum dies häufig passiert, wenn Sie Text von Webseiten wie diesem kopieren und einfügen.

+0

Können Sie Ihre Frage bearbeiten, wo Sie Datendatei Info zeigen - Verwendung {} Taste Zeilenformatierung zu halten. Ich würde es tun, aber es ist zu kurz, ein Bearbeitungs –

+0

darf ich kopiert und eingefügt und in eine Datei mit vim. Vielleicht ist Ihr Texteditor darauf eingestellt, Dateien in etwas anderem als utf-8 zu speichern? oder vielleicht ist es Anführungszeichen typografische Anführungszeichen zu ändern –

+0

Ich benutze leider Windows Notepad. Wenn ich dasselbe in den Text to notepad ++ kopiere, sehe ich nichts, was auf das Vorhandensein dieser Zeichen hindeuten würde. Vielleicht versuche ich es mit notepad ++ zu speichern. –

Antwort

1

Warum nicht Regex verwenden?

Ich denke, die

"[A-Z]{1,}/?[A-Z]{1,}[0-9]?" 

Dies ist besser, die Buchstaben in den Kappen zu fangen. Ich habe eine Liste aller solcher Symbole. Hier ist mein Ergebnis.

['BFLY', 'CBOE', 'BPVIX', 'CBOE/CME', 'FX', 'BPVIX1', 'CBOE/CME', 'FX', 'BPVIX2', 'CBOE/CME', 'FX'] 

Hier ist der Code

import re 
reg_obj = re.compile(r'[A-Z]{1,}/?[A-Z]{1,}[0-9]?') 
sym = reg_obj.findall(a)enter code here 
print(sym) 
+0

Das funktioniert ziemlich gut, aber ich muss auch alle ausfiltern, die keine Alpha-Zeichen sind, wie CBOE/CME. Ich habe nur eine For-Schleife verwendet, aber das scheint ein effizienterer Weg zu sein. Vielen Dank. –

+0

Können Sie Probe geben. Alles, was ich jetzt gemacht habe, habe ich heute gelernt. Du kannst du. Sie müssen nur Charaktere entkommen und das ist alles. Geben Sie Proben und wir werden es herausfinden – Parousia

+0

So in den obigen Zeilen: BFLY - Die CBOE S & P 500 Iron Butterfly Index BPVIX - CBOE/CME FX Britisches Pfund Volatilitätsindex BPVIX1 - CBOE/CME FX Britisches Pfund Volatilität erste Term Struktur Index BPVIX2 - CBOE/CME FX Britische Pfund Volatilität Second Term Structure Index BPVIX3 - CBOE/CME FX Britische Pfund Volatilität dritter Ausdruck Struktur Index die einzigen Dinge, die ich in der Liste wollen, sind: BFLY BPVIX BPVIX1 BPVIX2 Es wird wahrscheinlich ein wenig komplizierter sein, um sicherzustellen, dass die Symbole, die Nummer enthalten s sind in der Liste übrig. –