【问题标题】:Python sketch not working as intended (reading data from CSV)Python 草图未按预期工作(从 CSV 读取数据)
【发布时间】:2013-05-02 19:38:09
【问题描述】:

我目前正在尝试编写一个通过 CSV 文件运行学术论文的程序。 CSV 以制表符分隔,分为四列(作者、日期、标题、期刊)

这个想法是询问用户是否要通过作者、论文标题或期刊标题搜索该组论文(或按 Q 退出),并将查询结果按以下顺序显示给用户: 作者。年。标题。日记。

我的代码运行,但它只从我选择的“搜索选项”中检索数据。即,如果我选择按作者搜索,它将拉回并显示姓名与查询匹配的作者,但不显示任何其他信息(年份、标题或期刊)。这与其他搜索选项相同(即,如果我选择期刊,它将拉回任何相关期刊,但不会给我该期刊的作者、日期或标题)

非常感谢这里的任何帮助!下面是我的代码。

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

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

我已经用谷歌搜索并阅读了 CSV 参考页面,但我似乎无法理解它。 Aagin,感谢所有帮助!

【问题讨论】:

    标签: python function exception csv


    【解决方案1】:

    列表Author 只包含作者。当您执行for item in Author 时,您只是在浏览作者。当您然后打印找到的项目时,当然只有作者。每个字段都有相同的问题。您有四个单独的字段列表,它们没有以任何方式链接。

    我建议您查看pandas 库,它具有很好的工具,可以将 CSV 文件读入表格数据结构。它还可以做更多的事情,但它应该可以轻松处理您想要在此处执行的操作。

    【讨论】:

    • Pandas 很棒,但可能会矫枉过正(尽管它会很好)。您想制作一个列表列表,然后在子列表中搜索相关索引。
    • 我相信这需要安装吗?这个程序是一个任务,将在另一台计算机上运行,​​所以很遗憾我不认为这是一个选项。不过感谢您的帮助,我已经检查了 Pandas,它看起来确实很有帮助。可悲的是不是在这种情况下。
    • 非常感谢凯蒂 - 这是有道理的。我要给它一个爆炸!
    【解决方案2】:

    您的问题是您将所有信息放入单独的数组中...但是您这样做是因为您知道它们的列号...所以请保持原样并按数字调用!

    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
    

    所以现在你取整行,然后在第三列运行你的find()(你说的是标题),如果它与你的titleSearch 相同,它将打印整行以及所有信息,问题解决!

    【讨论】:

    • 非常感谢!那效果很好。如果我能提供代表,我会的,但可惜我是新用户,所以我只能向您表示感谢。
    • 好吧,您可以投票并将我的答案标记为正确哈哈。但当然,很高兴我能帮上忙!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多