2016-07-25 1 views
0

ここでは問題だtxtファイルから読み込む:

私はコピーしてテキスト行のhttps://www.cboe.org/mdx/mdi/mdiproducts.aspx

サンプルからtxtファイルにこのリスト全体を貼り付け:

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

これらの行は私のテキストファイルでは普通のように見え、utf-8エンコーディングでファイルを保存しました。

私の目標は、pythonを使用してこの長いリストのシンボルだけを取り除くことです。 BFLY、VPVIXなど、と私は、ファイルを読み込むには、次のコードを使用しています

新しいファイルに書き込むと、それを分割:

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

私が見ている問題が飛び出るなじみのない文字があるということです彼らはリストをフィルタリングする私の能力に影響を与えている。例:

print(y[0]) 
BFLY 

が、私はこれらの文字は、エンコーディングとは何かを持っていると私は成功せず、コーデックモジュールと、いくつかの異なるものを試してみましたことを推測しています。 .decode( 'utf-8')を使用すると、上記の変数xまたはyに対して使用しようとするとエラーが発生します。私は.encode( 'utf-8')を使うことができます。これは明らかに事態をさらに悪化させます。

主な問題は、リストをループして、すべて大文字ではないか、アルファ以外の文字を含むアイテムを削除しようとするときです。例:

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

この例では、シンボルBFLYがリストから削除されてしまいます。すべてのヘルプをいただければ幸いです

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

おかしい事は、私のような何かをした場合、これらの文字は、txtファイルに存在しないということです。このようなWebページからテキストをコピーして貼り付けるときに、なぜこれが頻繁に起こるのか、本当に理解したいと思います。

+0

はあなたがデータファイル情報を表示するあなたの質問を編集することができます。私はそれをしたいと思いますが、編集が短すぎて –

+0

vimを使ってファイルにコピーしました。おそらくあなたのテキストエディタはutf-8以外のファイルを保存するように設定されていますか?またはおそらくそれは引用符に変わります。 –

+0

私は残念なことに窓のメモ帳を使用しています。メモ帳にテキストをコピーすると、これらの文字の存在を示すものは表示されません。たぶん私はメモ帳+ +で保存しようとします。 –

答えて

1

なぜRegexを使用しないのですか?

私は、これはこれで良いですキャップ

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

の文字をキャッチすると思います。私はそのような記号すべてのリストを得ました。ここに私の結果です。行の書式設定を維持するために、{}ボタンを使用 -

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

ここでコード

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

これはかなりトリックですが、CBOE/CMEのようにアルファベットでないものも除外する必要があります。私はそれを行うためにforループを使用していましたが、これはより効率的な方法です。ありがとうございました。 –

+0

サンプルを渡せますか?私が今行ったことはすべて、今日学んだことです。あなたはできる。あなたは文字をエスケープする必要があります。それだけです。サンプルを与え、我々は、上記の行でそう – Parousia

+0

をそれを把握します: BFLY - CBOE S&P 500アイアン・バタフライインデックス BPVIX - CBOE/CME FX英ポンドのボラティリティ指数 BPVIX1 - CBOE/CME FX英ポンドのボラティリティ第一項構造インデックス BPVIX2 - CBOE/CME FX英ポンドボラティリティ第二項の構造インデックス BPVIX3 - CBOE/CME FX英ポンドボラティリティ第3期構造インデックスは、私は、リストにしたい 唯一の項目は、次のとおりです。 BFLY BPVIX BPVIX1 BPVIX2 数字を含むシンボルを確認することはおそらく少し難しいでしょうリストに残っています。 –