Как объединить два списка в токен с разделителями в python3 - PullRequest
0 голосов
/ 25 марта 2011

Я учусь в университете штата Алабама, у нас есть проект в нашем классе Python, и я застрял ... возможно, по какой-то глупой причине, но я не могу найти ответ.

вот ссылка на проект, так как было бы больно пытаться объяснить здесь.

http://beastie.cs.ua.edu/cs150/projects/project1.html

вот мой код:

import sys
from scanner import scan

def clInput():
    #Gets command line input

    log1 = sys.argv[1]
    log2 = sys.argv[2]
    name = sys.argv[3]

    if len(sys.argv) != 4:
        print('Incorrect number of arguments, should be 3')
        sys.exit(1)
    return log1,log2,name

def openFiles(log1,log2):
    #Opens sys.argv[1]&[2] for reading

    f1 = open(log1, 'r')
    f2 = open(log2, 'r')
    return f1, f2


def merge(log1,log2):
    #Merges parsed logs into list without '---'

    log1Parse = [[]]
    log2Parse = [[]]
    log1Count = 0
    log2Count = 0
    for i in log1:
        if i != ['---']:
            log1Parse[log1Count].append(i)
        else:
            log1Count += 1
            log1Parse.append([])

    for i in log2:
        if i != ['---']:
            log2Parse[log2Count].append(i)
        else:
            log2Count += 1
            log2Parse.append([])

return(log1Parse[0] + log2Parse[0] + log1Parse[1] + log2Parse[1])


def searchMerge(name,merged):
    #Searches Merged list for sys.argv[3]

    for i in range(len(merged)):
        if (merged[i][1] == name):
            print(merged[i][0],merged[i][1]," ".join(merged[i][2:]))



def main():
    log1,log2,name = clInput()
    f1,f2 = openFiles(log1,log2)

    #Sets the contents of the two scanned files to variables
    tokens1 = scan(f1)
    tokens2 = scan(f2)

    #Call to merge and search
    merged = merge(tokens1,tokens2)
    searchMerge(name,merged)




main()

ки. вот в чем проблема. Мы должны объединить два списка в отсортированный мастер-список, разделенный на --- 's

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

return(log1Parse[0] + log2Parse[0] + log1Parse[1] + log2Parse[1])

но это работает только для двух случаев ---. Есть ли в любом случае, я могу изменить свой возврат, чтобы посмотреть на все индексы вместо того, чтобы вручную вводить [0], [1], [2] и т. Д.? Мне нужно, чтобы разделить и объединить на произвольную сумму. Пожалуйста, помогите !!

p.s. не обращай внимания на noobness ... я новичок, мы все должны начать где-то

p.p.s. - сканирование импорта из сканера - это сканер, который я написал, чтобы получить все токены в данном списке

1 Ответ

1 голос
/ 25 марта 2011

so.py:

import sys

def main():
    # check and load command line arguments
    # your code
    if len(sys.argv) != 4:
        print('Incorrect number of arguments, should be 3')
        sys.exit(1)

    # open files using file io
    # your code
    f1 = open(log1, 'r')
    f2 = open(log2, 'r')

    # list comprehension to process and filter log files
    l1 = [ x.strip().split(" ",2) for x in f1.readlines() if x.strip() != "---" ]
    l2 = [ x.strip().split(" ",2) for x in f2.readlines() if x.strip() != "---" ]

    f1.close()
    f2.close()

    sorted_merged_lists = sorted(l1 + l2)

    results = [ x for x in sorted_merged_lists if x[1] == name ]

    for result in results:
        print result

main()

CLI:

$ python so.py log1.txt log2.txt Matt
['12:06:12', 'Matt', 'Logged In']
['13:30:07', 'Matt', 'Opened Terminal']
['15:02:00', 'Matt', 'Opened Evolution']
['15:31:16', 'Matt', 'Logged Out']

документы:

http://docs.python.org/release/3.0.1/tutorial/datastructures.html#list-comprehensions
http://docs.python.org/release/3.0.1/library/stdtypes.html?highlight=strip#str.strip
http://docs.python.org/release/3.0.1/library/stdtypes.html?highlight=split#str.split
http://docs.python.org/release/3.0.1/library/functions.html?highlight=sorted#sorted

...