Python实现读取文本文件 分姓名、出生日期两栏格式化输出
原代码存在几个不符合需求和不规范的点:
- 打开文件用了
r+读写权限,当前场景只需要读文件,这个权限多余;且没有做文件关闭处理,容易残留文件句柄 - 姓名部分没有做首字母截取的格式化,当前直接输出完整名字,不符合「名字首字母+姓氏」的要求
- 写循环时迭代变量和存储列表重名(遍历姓名列表时迭代变量也叫
name,遍历出生日期时迭代变量也叫birthdate),会覆盖原列表变量,属于容易出问题的不规范写法 - 输出时额外加了从0开始的数字序号,需求里没有要求输出序号
- 没有做空行判断,如果DOB.txt里有空行会直接触发索引报错
修正后的代码
name_list = [] birthdate_list = [] # 用上下文管理器打开文件,自动处理关闭,只读模式即可 with open("DOB.txt", "r", encoding="utf-8") as f: for line in f: content = line.strip() # 跳过空行避免报错 if not content: continue parts = content.split() # 取名字首字母,和姓氏拼接 formatted_name = f"{parts[0][0].upper()} {parts[1]}" name_list.append(formatted_name) # 拼接出生日期的三个部分(日、月、年) birthdate_list.append(" ".join(parts[2:])) # 按要求分区块输出 print("Name") for name in name_list: print(name) print("\nBirthdate") for birthdate in birthdate_list: print(birthdate)
逻辑说明
- 姓名格式化时统一把首字母转成大写,避免源文件里名字首字母小写导致输出不符合要求
- 打开文件时显式指定utf-8编码,兼容不同系统的文件编码,避免乱码
- 两个区块之间加了空行,输出排版更清晰,如果不需要可以去掉
print("\nBirthdate")里的换行符 - 逐行读取时先去掉首尾的空白字符、跳过空行,避免源文件格式不规整导致程序崩溃
内容的提问来源于stack exchange,提问作者Ophethile
相关产品推荐
相关产品推荐

