【问题标题】:How can I search a specific column in text file for a user input如何在文本文件中的特定列中搜索用户输入
【发布时间】:2018-11-27 22:25:55
【问题描述】:

我希望能够向用户询问他们想在特定列中搜索的字符串。它是制表符分隔的文本文件中的第二列,并查找并打印它在该列中出现的每个实例。

我希望用户能够只输入项目的一个 sn-p,不管大写还是小写,并取回完整的项目。在这种情况下,第二列包含作者列表,我希望用户能够搜索作者并返回作者姓名和他们写的书的名称,它们在同一行,但是在第一列。

def file_search():
    userInput = input('Enter a string: ')
    lowerInput = userInput.lower()
    f=open('file.txt','r')
    lowerInput=f.readlines()
    result=[]
    for x in lowerInput:
        result.append(x.split(' ')[1])
    f.close()

这是我尝试过的,但我的“列表索引超出范围” 一条线看起来像

A Widow For One Year    John Irving     Random House    6/14/1998   Fiction
Accident    Danielle Steel  Delacorte   2/27/1994   Fiction
Acheron     Sherrilyn Kenyon    St. Martin's    8/24/2008   Fiction
Advise and Consent      Allen Drury    Doubleday    10/4/1959   Fiction
Against All Enemies    Tom Clancy   Putnam   7/3/2011   Fiction
Airframe    Michael Crichton    Knopf   12/29/1996  Fiction
Airport    Arthur Hailey    Doubleday   4/7/1968    Fiction

【问题讨论】:

  • 我又加了几行,都是这样的,书名、作者、出版商、日期、流派
  • 你为什么用''分割?因为在名称中,它也有 ' '(空格?)字符。
  • 我的回答能回答你的问题吗?
  • 这似乎很难。如果您有 csv,为什么不使用 csv 模块?在任何情况下,除非您在 标签 上进行拆分,否则您的数据中没有第二列的概念 - 在这里按空格拆分将不起作用。

标签: python python-3.x


【解决方案1】:

我已经稍微修改了您的代码,但它肯定会让您继续前进。例如,如果您输入“john”,您将找到有关他工作的所有信息。

def file_search():
    userInput = input('Enter a string: ').lower()
    result = []
    with open("file.txt", 'r') as f:
        for x in f:
            if userInput in x.lower():
                result.append(x.split('   '))

    for s in result:
        print(s[1] + " has written: "+ s[0])

file_search()

【讨论】:

  • 我怎样才能修改它以便它只搜索第二列
  • 我以为你有标签,但它们是空格。现在有了它,您应该可以打印第一列和第二列
  • 好的,我重读了你的问题,修复了它,使它只打印第二列
  • 这很好用,只是我不确定为什么它只打印第一个结果而不是所有结果
  • 您能详细说明一下吗?我以为你说你只想要作者姓名和书?所以你想要与那个作者相关的所有专栏?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-31
相关资源
最近更新 更多