Последовательное объединение трех списков с регулярными выражениями - Python - PullRequest
0 голосов
/ 20 августа 2011

У меня есть текстовый файл, который я читаю с тремя регулярными выражениями.Я хотел бы объединить каждый элемент из каждой строки поиска регулярных выражений и распечатать их в том же формате, что и в последней строке ниже.Я просто не могу понять, как правильно комбинировать все.

Образец текста из трех разных источников (вы можете видеть, что информация иногда отсутствует, а в других случаях представлена ​​в разных форматах:

  1. Название облигации O / FC / F Cpn MTR FICOCAL WALB 1mCPR 60+ CE CWL 2004-6 2A5 0,95 0,09 L + 39 4 49 200 4 28,62 47,69%

  2. Название облигации O / FC / F Cpn FICO CAL WALB 60+ Примечания ПредложениеCSMC 06-9 7A1 25,00 12,01 L + 45 727 26 577 33,29 FLT, AS, 0,0% 50-00

  3. Тип CUSIP Название облигации Срок Структура предложения PRIME 17312KAB8 CMSI 07-5 1A2 7/ 7 92.50 LCF

    import re

    string = open ("cusip.txt") read_string = string.read ()

    cusip_reg_exp = re.compile ('\ s[0-9] {3} [a-zA-Z0-9] {6} \ s ') cusip_result = cusip_reg_exp.findall (read_string)

    bond_name_reg_exp = re.compile (' \ s [AZ]{3,5} \ s [0-9] {4} \ D {1,3} \ S {1,3} \ s {1,2} \ w {1,3} ') bond_name_result = bond_name_reg_exp.findall(read_string)

    bond_price_name_reg_ex = re.compile ('[$] {0,1} [0-9] {1,2} [-] {1} [0-9] {2}')bond_price_result = bond_price_name_reg_ex.findall (read_string)

    print (cusip_result [0], bond_name_result [0], bond_price_result [0])

Ответы [ 2 ]

1 голос
/ 20 августа 2011

Если все эти списки будут иметь одинаковую длину, вы можете объединить каждую соответствующую запись (разделенную пробелом), чтобы создать список объединенных строк, а затем объединить те (разделенные новой строкой), чтобы создать отображаемый список результатов. Я решил сделать это с помощью какого-нибудь волшебства со списком (не для циклов!).

print '\n'.join([' '.join([cusip_item, bond_name_item, bond_price_item]) for (cusip_item, bond_name_item, bond_price_item) in zip(cusip_result, bond_name_result, bond_price_result)])

Надеюсь, это отвечает вашим потребностям. Если нет, я уверен, что на этот вопрос будет несколько других толкований:)

Edit: я понимаю, что это немного долго, но вы могли бы сократить имена переменных, возможно. В качестве альтернативы (или, возможно, в дополнение), вы можете определить zip (cusip_result, bond_name_result, bond_price_result) до понимания. Я просто не могу помочь себе с этими вещами, хотя, я люблю горячие лайнеры Python One!

1 голос
/ 20 августа 2011

Вы можете использовать zip [документы] или itertools.izip [документы] :

for i, j, k in zip(cusip_result, bond_name_result, bond_price_result):
    print i, j, k

В зависимости от формата файла, модуль csv [docs] также может быть полезен (вместо использования регулярных выражений для извлечения содержание).

Вы также можете перебирать каждую строку и извлекать соответствующую информацию для каждой строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...