строка как массив в Python - PullRequest
0 голосов
/ 29 июня 2011

Я новичок в python. Мне нужно сделать следующую строку в виде массива.

['Soyuz_TMA-16', '2009-09-30']
['Soyuz_TMA-17', '2009-12-20']
['Soyuz_TMA-01M', '2010-10-07']
.......
.......
........

, чтобы я мог искать строку в текстовом файле, например. ['Soyuz_TMA-16',2009-09-30 ']. Если совпадения совпадают в какой-либо строке, например:

    abcd 30th september 2009 skakk gkdka kkhhf Soyuz TMA 16.
    gfigka Soyuz TMA 16 hfkhf hghhg fghh 30th september 2009.

, то должна возвращаться вся строка с пометкой строки совпадений.

Надеемся, что здесь есть решение.Спасибо!

1 Ответ

3 голосов
/ 03 июля 2011

Разобрать список миссий и дат в dict миссий , ключами которых являются строковые значения дат: '2009-12-20' .Затем вы можете найти диктовку ( ', если дата в миссиях: ...' ).Вам также понадобится разобрать текстовую форму дат (с помощью регулярных выражений) в '2009-12-20' форму, я написал функцию 'dtuple_to_date ()'.(Вы можете использовать набор, а не dict, та же идея. Поиск типов отображения, таких как dicts или sets, является постоянным временем, т. Е. O (1), а не O (N) для списка из N элементов.)* Этот код работает:

import re

missions = """['Soyuz_TMA-16', '2009-09-30']
    ['Soyuz_TMA-17', '2009-12-20']
    ['Soyuz_TMA-01M', '2010-10-07']""".translate(None,',[]\'\"').split('\n')
missions = [t.split() for t in missions]

missions = dict((d,m) for m,d in missions)


input = """abcd 30th september 2009 skakk gkdka kkhhf Soyuz TMA 16.
gfigka Soyuz TMA 16 hfkhf hghhg fghh 30th september 2009.""".split('\n')


find_dates = re.compile(r'(\d+)\S*\s+(\S+)\s+(2008|2009|2010|2011)')

def dtuple_to_date(d,mth,y):
   """convert ('30','september','2009') to '2009-09-30"""
   m = {'january':1,'february':2,'march':3,'april':4,'may':5,'june':6,
        'july':7,'august':8,'september':9,'october':10,'november':11,
        'december':12}[mth.lower()]
   return "%s-%02d-%s" % (y,m,d)


for idx,line in enumerate(input):
    for (day,mth,yr) in find_dates.findall(line):
        date = dtuple_to_date(day,mth,yr)
        #print 'Looking up', date
        if date in missions:
            print 'Line %d: reference to mission %s on date %s' \
                % (idx, missions[date], date)
...