2016-07-25 2 views
0

Вот проблема:Удаление закодированный текст из строк читать текстовый файл

Я скопировать и вставить весь этот список текстовый файл из https://www.cboe.org/mdx/mdi/mdiproducts.aspx

Образец текстовых строк:

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]) 

Любая помощь будет принята с благодарностью. Мне бы очень хотелось понять, почему это часто происходит при копировании и вставке текста с таких веб-страниц, как этот.

+0

Можете ли вы изменить свой вопрос, где вы показать информацию о файле данных - используйте кнопку {}, чтобы сохранить форматирование строки. Я бы сделал это, но это слишком короткое редактирование, которое нужно разрешить. –

+0

Я также скопировал и вставлял в файл с помощью vim. Возможно, ваш текстовый редактор настроен на сохранение файлов в чем-то, кроме utf-8? или, возможно, он меняет кавычки на фигурные кавычки. –

+0

К сожалению, я использую windows notepad. Если я копирую то же самое в текст в блокнот ++, я не вижу ничего, что указывало бы на существование этих символов. Возможно, я попробую сохранить его с помощью блокнота ++. –

ответ

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 - The CBOE S & P Index 500 Iron Butterfly BPVIX - СВОЕ/CME FX Британский фунт индекс волатильности BPVIX1 - СВОЕ/CME FX Британский фунт Волатильность Первый срок Индекс Структура BPVIX2 - СВОЕ/CME FX Британский фунт Волатильность Второй Term Индекс Структура BPVIX3 - СВОЕ/CME FX Британский фунт Волатильность Третий срок Индекс Структура единственные элементы, которые я хочу в списке: BFLY BPVIX BPVIX1 BPVIX2 Скорее всего, будет немного сложнее убедиться, что символы, содержащие число s оставлены в списке. –