在CSV文件中搜索 - python

时间:2014-10-02 17:05:58

标签: python csv search

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

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

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

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

提前谢谢!

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

名为 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'}

答案 2 :(得分:0)

正如凯文在评论中所说的那样,你想要使用csv模块。

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

如果您希望能够指定列的名称(而不仅仅是其位置),那么您需要查看csv.DictReader,其效果与使用的csv.reader相同在我的第一个链接的示例中,但使用dicts(列名称到列值的映射)而不是按顺序列列值。