Python如何将文本文件作为参数传入函数及代码错误排查
代码错误排查与逻辑说明
存在的错误
- 调用函数传入文件名时未加引号:代码里写的
get_data(data.txt)会让Python把data.txt当成未定义的变量,直接触发NameError,文件名是字符串类型,必须用单引号或双引号包裹,正确写法为get_data("data.txt")。 - 未处理文件读取时的格式兼容问题:
readlines()读取的每行末尾默认带换行符\n,如果文件存在空行、字段前后有空格、末尾有空行,直接拆分后转整数会触发ValueError;如果某行字段数不足3个,还会触发索引越界错误。 - 打开文件未指定编码:不同操作系统默认文件编码不一致,Windows系统默认编码为GBK,如果
data.txt是UTF-8格式保存,直接打开会触发编码报错,建议显式指定encoding="utf-8"。
原代码逻辑说明
原代码的整体设计思路是正确的,执行流程如下:
- 定义
get_data函数,接收文件路径作为入参,用来读取指定逗号分隔格式的商品数据文件 - 初始化空列表
records,用来存储解析完成的结构化商品记录 - 通过
with open()上下文管理器打开目标文件,这种写法会在文件读写完成后自动释放资源,不需要手动调用close()方法,是Python操作文件的标准推荐写法 - 调用
readlines()将文件所有内容读取为行列表,逐行遍历处理:- 用逗号作为分隔符拆分单行字符串,得到字段列表
- 按字段位置分别提取商品名、价格、库存,其中价格和库存转为整数类型
- 将单条商品记录追加到总记录列表
records中
- 所有行处理完成后,返回结构化的记录列表
- 调用函数获取结果,打印输出
修正后可运行代码
def get_data(filename): records = [] # 显式指定文件编码,兼容不同系统环境 with open(filename, encoding="utf-8") as readfile: lines = readfile.readlines() for line in lines: # 去除每行首尾的空格、换行符,跳过空行 line_content = line.strip() if not line_content: continue str_rec = line_content.split(",") # 跳过字段数量不足的异常行 if len(str_rec) < 3: continue pname = str_rec[0].strip() price = int(str_rec[1].strip()) quantity = int(str_rec[2].strip()) records.append([pname, price, quantity]) return records # 文件名作为字符串传入,必须加引号 hell = get_data("data.txt") print(hell)
注意:运行前需要确认
data.txt和Python脚本在同一目录下,如果文件存放在其他路径,需要传入完整的文件路径。
内容的提问来源于stack exchange,提问作者dinonuggie
相关产品推荐
相关产品推荐

