我有一个包含很多歌曲的csv文件。每行有5列,分别是:
艺术家|歌曲标题|专辑名称|类型|年
我想打开一个CSV文件,然后搜索所有歌曲名称以显示结果。因此,如果我寻找“天堂”,我会希望其中一个结果变成“Led Zeppelin的天堂的阶梯”。我不知道在执行搜索时如何指定CSV文件的特定列,并返回结果。
我还是python的新手,所以如果可能的话,一个简单的答案是最好的
提前谢谢!
答案 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(列名称到列值的映射)而不是按顺序列列值。