Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 创建一个函数,在数据集中按名称搜索作曲家_Python - Fatal编程技术网

Python 创建一个函数,在数据集中按名称搜索作曲家

Python 创建一个函数,在数据集中按名称搜索作曲家,python,Python,伙计们只是被我的代码卡住了……如果有人能帮我,我会非常感激的 Q1.创建一个函数,在数据集中按名称搜索作曲家。由于编写器可能存在多次,因此函数应返回与编写器相关的适当“BL记录ID”列表 导入csv def searchname(用户数据): 以open('bl_printed_music_500.csv',newline='',encoding=“utf-8-sig”)作为csvfile: reader=csv.DictReader(csvfile) 发现=错误 对于读取器中的行: 如果行['

伙计们只是被我的代码卡住了……如果有人能帮我,我会非常感激的

Q1.创建一个函数,在数据集中按名称搜索作曲家。由于编写器可能存在多次,因此函数应返回与编写器相关的适当“BL记录ID”列表

导入csv
def searchname(用户数据):
以open('bl_printed_music_500.csv',newline='',encoding=“utf-8-sig”)作为csvfile:
reader=csv.DictReader(csvfile)
发现=错误
对于读取器中的行:
如果行['Composer']==用户数据:
找到=真
返回列表()
打印(结果)
uinput=input('搜索编写器:')
搜索名称(uinput)

只需将“n”更改为可以找到作曲家姓名的列。您可能还需要规范化大写/非大写字母,因为您正在处理用户输入

另外,我只输出整行数据,如果文件中有太多数据,您可以专门将所需内容添加到列表中

def searchname(userdata):
    list = []
    for line in open('bl_printed_music_500.csv', 'r'):
      row = line.split(',')
      if row[n] == userdata:
          list.append(line)
    return(list)

uinput = input('Search for Composer: ')
print(searchname(uinput))

您应该在
之前为
-循环创建空列表。在
for
-循环中,您应该
行(或
行[“ID”]
)附加到此列表中。稍后您应该返回此列表

您不应该在
return
之后使用
print()
,因为它永远不会执行,因为
return
会立即退出函数

def searchname(userdata):
    results = list()
    with open('bl_printed_music_500.csv', newline='', encoding="utf-8-sig") as csvfile:
        reader = csv.DictReader(csvfile)
        for row in reader:
            if row['Composer'] == userdata:
                results.append(row)
    return results

# --- main ---

uinput = input('Search for Composer: ')
results = searchname(uinput)
print(results)

顺便说一句:

有时最好转换为
lower()
upper()
以正确比较字符串

if row['Composer'].lower() == userdata.lower():
因为字符串可以有不同的大小

有时,检查字符串是否只是其他字符串的一部分是很好的

if userdata.lower() in row['Composer'].lower():
因为用户只能给出部分名称

有时文本的字符串末尾可能有空格(空格、制表符、回车符),最好使用
strip()



如果您可以包含csv文件的前5-6行,那么回答您的问题就会更容易。
list()
创建空列表。您应该在循环之前创建列表-ie.
results=list()
并将行追加到此列表-ie.
results.append(row)
results.append(row[“ID]”)
-以及以后的
返回结果
print()
after
return
将永远不会执行,因为
return
会立即退出函数。BL记录ID编写器编写器生命日期标题发布日期(标准化)发布日期(非标准化)出版地出版商ISBN ISMN出版商编号BL shelfmark 1279866加拿大民歌企鹅图书1973 Harmondsworth企鹅图书140708421 mH00/3305;X.439/3548 1312079音乐家理论与分析指南选集2005 c2005纽约WW Norton&Co 393925765 F.1946.h 1706700 Hoffaimer,Paul 1459-1537口琴诗集Pauli Hoffeimeri:viri马术尊严徽章,ac Music excellentis,quales Subtank感谢您的帮助Pakpe。。我复制粘贴了前5行,但看起来很混乱…谢谢你的代码。。我运行它,但它返回一个空列表…你知道为什么吗?搜索Composer:Paul[]我没有你的数据,所以我无法测试它并回答这个问题,但可能没有什么问题。1) 数据库中可能有
paul
paul
,您必须使用
lower()
paul
paul
进行比较。2) 您可能有
Paul LastName
,然后您必须在
中使用
,而不是
=
,因为您无法比较
“Paul”==“Paul LastName”
-您需要在“Paul LastName”中使用
“Paul”。3) 您可能在数据库中有白字(空格、制表符、回车符)——屏幕上看不到,但它们会改变一切——即您无法比较
“Paul{spaces}”==“Paul”
——您可能需要
strip()
来删除这些空格。我在其他注释中看到了您的数据(最好把它放在问题中——它会更具可读性)你必须在
中使用
,而不是
=
,也就是说,
中的“Paul”给出了
True
但是
中的“Paul”==“hoffaimer,Paul”
给出了
False
。顺便说一句:为了确保:它需要第[“Composer”]行中的
用户数据
而不是第[“Composer”]行中的
用户数据
谢谢Kyle。。我运行了它,但得到了一个错误:(((NameError Traceback(最近一次调用)in()8 9 uinput=input('Search for Composer:')-->10 print(searchname(uinput))11 in searchname(userdata)3 for line in open('bl_printed_music_500.csv','r'):4行=行.split(','))--->5如果行[n]==userdata:6列表。追加(行)7返回(列表)名称错误:名称“n”未定义当然,您有一个错误。我不知道您的csv文件是什么样子,也不知道任何可以让我为您提供运行代码的有形数据。这只是一个如何实现您希望实现的想法。共享您的csv文件的10行,我将告诉您如何使其工作…感谢您的回答.我可以分享第一行,但看起来有点凌乱…BL唱片ID作曲人作曲人生活日期标题出版日期(标准化)出版日期(非标准化)出版地点ISBN ISMN出版社编号BL shelfmark 1279866加拿大民歌企鹅图书1973年1973哈蒙德斯沃斯企鹅图书140708421 mH00/3305;X.439/3548 1312079音乐家理论与分析指南选集2005 c2005纽约WW Norton&Co 393925765 F.1946 h 1706700 Hoffaimer,Paul 1459-1537 Harm波利·霍夫海默里:威利马术庄严徽章,ac音乐卓越,鹌鹑子-
if userdata.strip().lower() in row['Composer'].strip().lower():
def searchname(userdata):
    results = list()
    with open('bl_printed_music_500.csv', newline='', encoding="utf-8-sig") as csvfile:
        reader = csv.DictReader(csvfile)
        for row in reader:
            if userdata.strip().lower() in row['Composer'].strip().lower():
                results.append(row)
    return results

# --- main ---

uinput = input('Search for Composer: ')
results = searchname(uinput)
print(results)