所以我建议你对我的代码进行更正。我能够进入循环但是一旦我输入正确的名称,我仍然无法摆脱它。有什么建议? 这就是我得到的:
import csv
full_name = input('Enter your full name: ').lower()
with open('Report1.csv') as csvfile:
hour_summation = {}
read_csv = csv.reader(csvfile, delimiter=',')
for row in read_csv:
while (' '.join((row[0], row[1]))).lower() != full_name.strip().lower():
print('Name is not in system')
full_name = input('Enter your full name: ').lower()
if(' '.join((row[0], row[1]))).lower() == full_name.strip().lower():
hour_summation[row[2]] = hour_summation.get(row[2], 0) + int(float(row[3]))
print('This is {} full hours report:'.format(full_name))
for k, v in hour_summation.items():
print(k + ': ' + str(v) + ' hours')
这是我输入时的结果: 仅供参考。史蒂夫米勒不在csv文件中,所以第一反应是正确的。但是,Sri Mantri在文件中,它应该继续并打印出她名下的所有列表。
Enter your full name: Steve Miller
Name is not in system
Enter your full name: Sri Mantri
Name is not in system
这里是代码运行时输出的样子。
Enter your full name: Sri mantri
This is sri mantri full hours report:
Beeline Blank: 28 hours
SRV-0001 Service Requests for Base and Direct Services: 4 hours
SUP-0001 Support Requests with a CISM Ticket: 129 hours
SUP-2503 Web Application Maintenance & Support: 72 hours
0026184229 Margin Controlling Java Rewrite: 4 hours
0033472751 PRE-AFE 2017 - CMS Enhancements: 2 hours
0033472863 PRE-AFE 2017 - BPM Enhancements: 67 hours
APP-10008 Pre-Series (Non-Mainframe): 4 hours
APP-10146 Logistics (Non-Mainframe): 3 hours
APP-10195 Vehicle Labor System (Mainframe): 3 hours
APP-10354 Web PartsPro (Non-Mainframe): 1 hours
APP-10431 VIPService (Non-Mainframe): 1 hours
APP-10432 VIPService (Mainframe): 3 hours
APP-10536 Truck Invoice Adjustments (Mainframe): 2 hours
并且csv看起来像这样:
First Name Last Name Activity Hours
Sri Mantri SUP-2503 Web Application Maintenance & Support 11
Sri Mantri SUP-2503 Web Application Maintenance & Support 3
Sri Mantri SUP-2503 Web Application Maintenance & Support 5
Sri Mantri SUP-2503 Web Application Maintenance & Support 2
Jeff Moore SUP-2503 Web Application Maintenance & Support 3
David Ayers SUP-2507 NAFTA MFTS OS Support 10
Prasanth Musunuru 0020826809 Vertex 6.0 at the NDC 4
Prasanth Musunuru 0020826809 Vertex 6.0 at the NDC 3
Prasanth Musunuru 0020826809 Vertex 6.0 at the NDC 1
Prasanth Musunuru 0020826809 Vertex 6.0 at the NDC 1
Jeff Moore 0024480049 Fuel Tanks (infrastructure) - time tracking 1
Jeff Moore 0024480049 Fuel Tanks (infrastructure) - time tracking 1
Jeff Moore 0024480049 Fuel Tanks (infrastructure) - time tracking 4
答案 0 :(得分:1)
在此代码中,您使用name
获取名称,但稍后使用full_name
while (' '.join((row[0], row[1]))).lower() != full_name.strip():
print('Name is not in system')
name = input('Enter your full name: ')
您应该只使用full_name
(并且需要lower()
)
while (' '.join((row[0], row[1]))).lower() != full_name.strip():
print('Name is not in system')
full_name = input('Enter your full name: ').lower() # <-- full_name
或将name
转换为full_name
while (' '.join((row[0], row[1]))).lower() != full_name.strip():
print('Name is not in system')
name = input('Enter your full name: ')
full_name = name.lower() # <-- full_name
答案 1 :(得分:1)
您在while循环中缺少一个将name连接到full_name的行:
full_name = name.lower()
在你的while循环中添加它,就在input()调用的正下方,就像你在文件的顶部一样。
在while
循环中,它应该说:
name = input('Enter your full name: ')
full_name = name.lower()
这将使您的程序至少进一步运行!
另外,请注意您的程序逻辑可能存在缺陷......您逐步浏览CSV的每一行,检查一个人的姓名。这意味着如果您在CSV文件中有多个条目(即 - CSV文件只包含一个人的信息),您实际上只能访问列表中的第一个条目。您应该提示输入用户名,然后运行CSV的每一行以检查匹配项。只有当整个CSV中没有匹配时,您才会要求另一个名称......只需看看......
答案 2 :(得分:1)
如果你真的对其他解决方案感兴趣,那就去找我的答案吧。使用pandas可以更轻松地解决您的需求。
所以我有一个CSV文件(“names.csv”),里面有这个值,
Name Hours
Sri Mati 1
Some Name 2
以下是代码:
import pandas
if __name__ == "__main__":
csv = pandas.read_csv("names.csv")
name = input("Enter your name: ")
if (csv["Name"]==name).any():
print("Name Present")
correct_name = csv.loc[csv["Name"] == name]
# print everything
print(csv)
print()
#print correct name
print(correct_name)
print() # for clear display
# get individual things
print("Correct Inidividual Values")
print(correct_name.values)
else:
print("Name not there")
示例输入和输出:
Enter your name: Steve Miller
Name not there
下一步,
Enter your name: Sri Mati
Name Present
Name Hours
0 Sri Mati 1
1 Some Name 2
Name Hours
0 Sri Mati 1
Correct Inidividual Values
[['Sri Mati' 1]]