2011-03-25 49 views
0

我是阿拉巴马大学的CS专业,我们在我们的python类中有一个项目,我卡住了...可能是因为一些愚蠢的原因,但我不能找到答案。如何合并python3中的分隔标记两个列表

这里是项目的链接,因为在这里尝试和解释会很麻烦。

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

确定。所以继承人的问题。我们将两个列表合并到一个排序的主列表中,这些列表的分隔符位于---的

我的两个日志文件与我上面链接的网站上发布的日志文件相匹配。此代码有效,但如果每个列表中有两个以上的实例---它不会跳转到下一个列表以获取其他标记,等等。我有它与合并功能两个工作。在该函数结束时我返回

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

但这只适用于两个实例---。无论如何,我可以改变我的回报来查看所有索引,而不必手动输入[0],[1],[2]等。我需要它来分割和合并任意数量。请帮忙!!

p.s.无视noobness ...即时通讯新手,我们都必须从某处开始

p.p.s. - 从该扫描仪扫描输入是一台扫描仪我写采取所有的标记在给定的列表

回答

1

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

+0

非常感谢你的快速回复,但是我需要有输出作为一切: 12时06分12秒马特登录 13时30分07秒马特打开终端 15:02:00马特打开演变 15:31:16马特注销 – 2011-03-25 03:38:33

+0

我要回去编辑代码,但看看我在底部链接的文档。将列表与空格连接在一起:'print'“for循环中的.join(result)'应该让你找到格式 – DTing 2011-03-25 03:41:36

+0

谢谢先生,救命! – 2011-03-25 03:43:48