从txt文件

时间:2016-07-25 16:07:36

标签: python html encoding utf-8 decoding

问题在于:

我将整个列表复制并粘贴到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最终将从列表中删除。

有趣的是,如果我执行以下操作,这些字符不会出现在txt文件中:

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

非常感谢任何帮助。我真的很想理解为什么在从像这样的网页复制和粘贴文本时经常发生这种情况。

1 个答案:

答案 0 :(得分: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)