2016-07-25 53 views
0

這裏的問題:從字符串中刪除編碼的文本

我複製並從文本行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去掉這個長列表中的符號,例如.e.g。 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最終被從列表中刪除。

有趣的是,這些人物都沒有出現在一個txt文件,如果我這樣做:

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

任何幫助將不勝感激。我真的很想理解爲什麼在從這樣的網頁複製和粘貼文本時經常發生這種情況。

+0

您可以編輯您的問題,其中顯示有數據文件信息 - 使用{}按鈕,保持線路的格式。我會這樣做,但是它太短了編輯 –

+0

我複製以及粘貼到一個文件使用vim。也許你的文本編輯器設置爲將文件保存在utf-8以外的文件中?或者也許它正在更改引號來捲曲引號 –

+0

不幸的是,我正在使用Windows記事本。如果我將相同的文本複製到記事本++,我沒有看到任何可以指示這些字符存在的內容。也許我會嘗試用記事本++代替它。 –

回答

1

爲什麼不使用正則表達式?

我認爲這將趕上字母大寫

"[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 - 芝加哥期權交易所標準普爾500鐵蝴蝶指數 BPVIX - CBOE/CME FX英鎊波幅指數 BPVIX1 - CBOE/CME FX英鎊波幅第一學期結構指標 BPVIX2 - CBOE/CME FX英鎊波幅其次期限結構指數 BPVIX3 - CBOE/CME FX英鎊波幅三期限結構指數 我想在列表中唯一的項目有: BFLY BPVIX BPVIX1 BPVIX2 確保包含數字的符號可能會更棘手s留在列表中。 –