2016-07-25 56 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留在列表中。 –