Python读取CSV文件:替换固定行索引为用户输入值及单行删除的技术问题
嘿,我来帮你搞定这两个问题!
1. 解决索引类型错误
你碰到的TypeError是因为用户输入的内容默认是字符串类型,而列表索引必须是整数。比如用input()获取用户选择的数字时,直接把字符串丢进[]里肯定会报错,得先把它转成整数才行。
给你改好的代码示例,还加了索引有效性判断,避免越界报错:
import csv # 获取用户输入并转为整数 user_row_index = int(input("请输入要读取的行索引(从0开始):")) with open("DATABASE.csv", "r", newline="") as a: csv_reader = csv.DictReader(a) rows = list(csv_reader) # 先判断索引是否在有效范围内 if 0 <= user_row_index < len(rows): print(rows[user_row_index]["NAME"], rows[user_row_index]["SURNAME"]) else: print("输入的索引超出文件行数范围啦!")
2. 删除CSV文件中的单独一行
要删除CSV里的某一行,核心思路是先读取所有行,过滤掉目标行,再把剩下的内容写回文件。直接修改原文件不太现实,通常是读取后覆盖写入(建议操作前先备份原文件,防止数据丢失)。
用DictReader/DictWriter的示例(保留表头)
import csv # 获取要删除的行索引(从0开始,对应数据行,表头不算在内) row_to_delete = int(input("请输入要删除的行索引(从0开始):")) # 读取所有内容,保存表头和数据行 with open("DATABASE.csv", "r", newline="") as infile: reader = csv.DictReader(infile) fieldnames = reader.fieldnames # 保存表头字段 rows = list(reader) # 检查索引有效性并删除目标行 if 0 <= row_to_delete < len(rows): del rows[row_to_delete] # 把过滤后的内容写回文件 with open("DATABASE.csv", "w", newline="") as outfile: writer = csv.DictWriter(outfile, fieldnames=fieldnames) writer.writeheader() # 写入表头 writer.writerows(rows) # 写入剩余数据行 print("指定行已成功删除!") else: print("输入的索引无效,无法执行删除操作!")
用普通csv.reader/writer的示例(表头会被当作第一行)
如果不需要字典式操作,也可以用基础的读取写入方式,注意这里表头会被算成索引0的行:
import csv row_to_delete = int(input("请输入要删除的行索引(从0开始,表头为第0行):")) # 读取所有行 with open("DATABASE.csv", "r", newline="") as infile: rows = list(csv.reader(infile)) if 0 <= row_to_delete < len(rows): del rows[row_to_delete] # 写回文件 with open("DATABASE.csv", "w", newline="") as outfile: writer = csv.writer(outfile) writer.writerows(rows) print("目标行已删除!") else: print("索引超出范围,请重新输入!")
内容的提问来源于stack exchange,提问作者enricozz
相关产品推荐
相关产品推荐

