Python读取导入文件时循环打印次数过多问题排查
搞定薪资表格程序的循环次数过多问题
嘿,我猜你踩的坑是测试文件的格式和你最初预想的完全不一样——你本来以为每行存一个员工的信息,但实际测试文件里是把所有员工的信息挤在一行里,每个员工的字段用逗号分隔,员工之间用空格隔开。要是直接把整行按逗号拆成列表,那循环次数肯定会爆炸,毕竟4个员工就有16个字段,循环16次可不就多了嘛!
问题出在哪?
你的测试文件内容是这样的:
Barb,Moran,51,12.85 Joy,Rinehimer,30,9.35 Joe,Bellucci,45,9.55 Dave,Flaim,37,17.70
要是你直接用line.split(',')处理这一行,得到的是一个16个元素的列表(4个员工×4个字段),遍历这个列表的话,自然会执行16次,而不是你想要的4次。
怎么修复?看这里
1. 正确拆分数据的步骤
得先把整行按空格拆成单个员工的信息串,再对每个员工串做逗号拆分,这样循环次数就正好是员工的数量了。给你改好的代码示例:
def getFile(): filename = input("Please enter the employee file name: ") print() try: with open(filename, 'r') as infile: # 先打印个表头,让表格看着清楚 print(f"{'Last Name':<12} {'First Name':<10} {'Hours':>5} {'Rate':>7} {'Gross Pay':>10}") print("-" * 45) for line in infile: # 先把整行拆成一个个员工的信息块 employee_blocks = line.strip().split() for block in employee_blocks: # 拆分每个员工的字段 first_name, last_name, hours_worked, hourly_rate = block.split(',') # 把字符串转成数值,方便计算薪资 hours_worked = float(hours_worked) hourly_rate = float(hourly_rate) gross_pay = hours_worked * hourly_rate # 格式化打印,对齐看着舒服 print(f"{last_name:<12} {first_name:<10} {hours_worked:>5.1f} {hourly_rate:>7.2f} {gross_pay:>10.2f}") except FileNotFoundError: print(f"糟了,找不到文件 {filename} 哦!") # 调用函数跑起来 getFile()
2. 为啥这样就解决问题了?
- 第一步
line.strip().split()把整行拆成4个员工块:["Barb,Moran,51,12.85", "Joy,Rinehimer,30,9.35", ...] - 然后遍历这4个块,每个块再拆成4个字段,循环次数就正好是4次,完美匹配员工数量。
3. 额外提个小建议
可以加个异常处理,比如万一某个员工的字段数量不对,或者数值转不了,程序也不会直接崩掉,比如在拆分字段那里加个try-except:
try: first_name, last_name, hours_worked, hourly_rate = block.split(',') # 后续转换和计算 except ValueError: print(f"警告:这条员工数据格式有问题,跳过:{block}")
划重点
一定要先摸清楚输入文件的格式!如果以后你的文件改成每行一个员工,那你最初的逐行逗号拆分是没问题的,但当前测试文件是一行多个员工,就得先按空格拆员工块,再处理字段。
内容的提问来源于stack exchange,提问作者jhomlers
相关产品推荐
相关产品推荐

