2013-05-02 57 views
0

我目前正在尝试编写一个程序,该程序运行的是学术论文的CSV文件。 CSV是制表符分隔,分为四列(作者,日期,标题,期刊)Python草图不按预期工作(从CSV中读取数据)

想法是询问用户他是否想通过作者,论文标题或期刊标题(或按Q退出),并按照以下顺序将查询结果显示给用户:作者/ s。年。标题。日志。

我的代码运行,但它只从我选择的'搜索选项'中检索数据。 I.E,如果我选择按作者搜索,它将撤回并显示名称与查询匹配的作者,但不会显示任何其他信息(年,标题或期刊)。这与其他搜索选项相同(即如果我选择Journal,它将撤消任何相关期刊,但不会给我作者,日期或所述期刊的标题)

此处的任何帮助都非常感谢!以下是我的代码。

import csv 


def AuthorSearch(): 
    authorSearch = input("Please type Author name. \n") 
    for item in Author: 
     if item.find(authorSearch) != -1: 
      print (item) 

def TitleSearch(): 
    titleSearch = input("Please type in Title, \n") 
    for item in Title: 
     if item.find(titleSearch) != -1: 
      print (item) 

def JournalSearch(): 
    journalSearch = input("Please type in a Journal, \n") 
    for item in Journal: 
     if item.find(journalSearch) != -1: 
      print (item) 






data = csv.reader (open('List.txt', 'rt'), delimiter='\t') 


Author, Year, Title, Journal = [], [], [], [] 

for row in data: 
    Author.append(row[0]) 
    Year.append(row[1]) 
    Title.append(row[2]) 
    Journal.append(row[3]) 


print ("Please type in capitals.") 
searchOption = input("Press A to search for Author, T to search titles or J to search Journals or press Q to quit. \n") 

if searchOption == 'A': 
AuthorSearch() 

elif searchOption == 'T': 
    TitleSearch() 

elif searchOption == 'J': 
    JournalSearch() 

elif searchOption == 'Q': 
    exit() 

非常感谢任何人的帮助,非常感谢!

我用Google搜索和阅读的CSV引用页面,但我似乎无法让我的头周围。 Aagin,所有帮助表示赞赏!

回答

0

你的问题是你把你所有的信息放到单独的数组中......但是你这样做是因为你知道他们的列号......所以只要保持原样并按号码拨打即可!

everything = [] 
for row in data: 
    everything.append[row] 

这里是您的标题搜索功能为例:

def TitleSearch(): 
    titleSearch = input("Please type in Title, \n") 
    for row in everything: 
     title = row[2] 
     if title.find(titleSearch) != -1: 
      print row 

所以现在你把整个行,只是在第3列(你说的那个是冠军),并运行find()如果它与您的titleSearch相同,它将打印整行所有信息,问题解决!

+0

非常感谢你!这非常有效。如果我可以给代表我会,但唉,我是一个新用户,所以我可以给你所有我非常感谢。 – 2013-05-02 22:54:56

+0

以及你可以upvote和标记我的答案是正确的哈哈。但当然,很高兴我能帮上忙! – 2013-05-02 23:14:24

1

列表Author不包含任何东西,但作者。当你做for item in Author时,你只能看作者。当你打印找到的项目时,当然只有作者。你在每个领域都有同样的问题。您有四个不以任何方式链接的单独列表。

我建议你看看pandas这个库,它有很好的把CSV文件读入表格数据结构的功能。它也做了很多,但它应该很容易处理你想在这里做的事情。

+0

熊猫很棒,但可能矫枉过正(虽然它会很好)。你想列出一个列表,然后在子列表中搜索相关的索引。 – katrielalex 2013-05-02 19:56:21

+0

我认为这需要安装吗?这个程序是一个任务,将在不同的计算机上运行,​​所以我不认为这是一个选项。 感谢您的帮助,虽然我检查了熊猫,它看起来很有帮助。可悲的是不在这种情况下。 – 2013-05-02 19:56:29

+0

非常感谢凯蒂 - 这很有道理。我会给它一个爆炸! – 2013-05-02 19:57:37