Python实现输入DNI在CSV无匹配时打印错误提示的方法
Pandas处理CSV时判断DNI是否存在的实现方案
问题场景
作为Python新手,使用Pandas处理cheques.csv文件时,需要实现:当输入的DNI在CSV文件中无匹配数据时,打印错误提示并终止程序。尝试在第9行编写判断逻辑但未成功。
原始代码
import pandas as pd from datetime import datetime data = pd.read_csv('cheques.csv') dt = datetime.now() DNI = int(input('Ingrese su DNI: ')) if DNI != data[DNI]: print('DNI no existente') tipoCheque = input('Ingrese el tipo de cheque (EMITIDO O DEPOSITADO): ').upper() estadoCheque = input('Ingrese el estado del cheque (APROBADO, RECHAZADO o PENDIENTE): ').upper() # str.contains revisa un dato tipo string datoCliente = data[(data["DNI"] == (DNI)) & (data["Tipo"].str.contains(tipoCheque)) &(data["Estado"].str.contains(estadoCheque))] salida = input('Ingrese el formato de salida de los datos(PANTALLA o CSV): ').upper() if salida == 'PANTALLA': print(datoCliente) elif salida == 'CSV': datoCliente.to_csv(f'{DNI}-{dt}.csv') print('Archivo CSV creado con éxito')
错误原因
原代码第9行的if DNI != data[DNI]:逻辑错误:
data[DNI]是尝试获取列名为输入DNI数值的列,而非检查输入的DNI是否存在于DNI列的数值集合中- 若CSV中不存在对应列名,会直接抛出
KeyError;即使存在,也无法实现预期的判断逻辑
解决方案
通过检查输入的DNI是否在data['DNI']的数值列表中实现判断逻辑,同时导入sys模块用于终止程序:
核心修正代码
import sys # 输入DNI后添加如下判断 DNI = int(input('Ingrese su DNI: ')) if DNI not in data['DNI'].values.tolist(): print('DNI不存在,请重试') sys.exit()
完整修正代码
import pandas as pd from datetime import datetime import sys data = pd.read_csv('cheques.csv') dt = datetime.now() DNI = int(input('Ingrese su DNI: ')) if DNI not in data['DNI'].values.tolist(): print('DNI不存在,请重试') sys.exit() tipoCheque = input('Ingrese el tipo de cheque (EMITIDO O DEPOSITADO): ').upper() estadoCheque = input('Ingrese el estado del cheque (APROBADO, RECHAZADO o PENDIENTE): ').upper() # str.contains 用于检查字符串内容 datoCliente = data[(data["DNI"] == DNI) & (data["Tipo"].str.contains(tipoCheque)) & (data["Estado"].str.contains(estadoCheque))] salida = input('Ingrese el formato de salida de los datos(PANTALLA o CSV): ').upper() if salida == 'PANTALLA': print(datoCliente) elif salida == 'CSV': datoCliente.to_csv(f'{DNI}-{dt}.csv') print('CSV文件创建成功')
内容的提问来源于stack exchange,提问作者Bluzk
相关产品推荐
相关产品推荐

