【问题标题】:Searching in a CSV file - python在 CSV 文件中搜索 - python
【发布时间】:2014-11-27 17:43:58
【问题描述】:

我有一个包含很多歌曲的 csv 文件。每行有5列,分别是:

艺术家 |歌曲名称 |专辑名称 |类型 |年份

我想打开一个 CSV 文件,然后搜索所有歌曲名称以显示结果。因此,如果我搜索“天堂”,我希望其中一个结果显示为“Led Zeppelin 通往 天堂 的阶梯”。我不知道在执行搜索时如何指定 CSV 文件的特定列并返回结果。

我还是 python 新手,所以如果可能的话,最好给出一个简单的答案

提前谢谢你!

【问题讨论】:

  • 到目前为止你有没有尝试过?如果是,请分享代码
  • 看看csv 模块。
  • 考虑使用 Logstash/ElasticSearch 来存储您的歌曲。它可以跨多个数据元素进行非常快速的文本搜索。你可以使用 Python 作为它的接口。
  • 只搜索一栏还是全部搜索?

标签: python csv search


【解决方案1】:

正如 Kevin 在他的评论中所说,您需要为此使用 csv 模块。

Here are some examples 了解如何使用它。

如果您希望能够指定列的名称(而不仅仅是它们的位置),您需要查看csv.DictReader,它的工作方式与我第一个示例中使用的csv.reader 一样链接,但使用 dicts(列名到列值的映射)而不是按顺序列出的列值。

【讨论】:

    【解决方案2】:

    要搜索歌曲,您可以使用:

    import sys
    import csv
    
    if len(sys.argv) < 2:
        print 'Please provide a song name to search for.'
        sys.exit(-1)
    
    match = None
    with open('songs.csv') as f:
        r = csv.reader(f, delimiter='|')
        next(r, None) # skip header
        for row in r:
            if sys.argv[1] in row[1]:
                match = row[:]
                break
    
    if match:
        print '%s by %s' % (match[1].strip(), match[0].strip())
    else:
        print '%s not found.' % (sys.argv[1])
    

    这样称呼它:

    python search.py Heaven
    

    【讨论】:

      【解决方案3】:

      名为 songs.csv

      的文件示例
      from StringIO import StringIO
      
      s = """
      Artist;Song Title;Album Name;Genre;Year
      Rush;Tom Sawyer;Moving Pictures;Progressive Rock;1981
      Led Zeppelin;Black Dog;Led Zeppelin IV;Hard Rock;1970
      AC/DC;Back in Black;Back in Black;Hard Rock; 1980
      """
      songs_file = StringIO(s)
      

      将数据文件加载到csv.DictReader

      from csv import DictReader
      
      songsdb = [i for i in DictReader(songs_file, delimiter=';')]
      
      def search(criteria):
          for row in songsdb:
              for data in row.values():
                  if criteria in data:
                      print row
      
      search('Black')
      
      {'Album Name': 'Led Zeppelin IV', 'Genre': 'Hard Rock', 'Year': '1970', 'Song Title': 'Black Dog', 'Artist': 'Led Zeppelin'}
      {'Album Name': 'Back in Black', 'Genre': 'Hard Rock', 'Year': ' 1980', 'Song Title': 'Back in Black', 'Artist': 'AC/DC'}
      

      【讨论】:

        猜你喜欢
        • 2011-08-30
        • 1970-01-01
        • 1970-01-01
        • 2014-02-25
        • 2011-01-18
        • 1970-01-01
        • 2013-12-06
        • 1970-01-01
        • 2022-01-15
        相关资源
        最近更新 更多