如何用纯Python处理CSV构建观影偏好字典并解决标题末尾空格问题
问题原因与修正方案
1. 电影标题无法去除末尾空格的问题
你写的for movie in movietitles: movie=movie.rstrip() 并没有修改movietitles列表本身的元素:字符串是Python中的不可变类型,循环里的movie只是临时变量,修改它不会同步到原列表。正确做法是遍历下标修改,或者生成新的清洗后列表。
2. 姓名与偏好无法正确写入字典的问题
你错误地把整行字符串line直接按下标取值,正确逻辑应该是先把每行按逗号分割成列表,再按位置取姓名、偏好字段,同时还要把偏好值从字符串转成整数类型。另外原代码没有跳过表头行,会把表头也当成用户偏好数据处理。
修正后完整代码
def read_in_movie_preference(): """Read the move data, and return a preference dictionary.""" preference = {} movies = [] file_location = "./data/" # 用with语句自动管理文件关闭,避免资源泄漏 with open(file_location + "preference.csv", "r", encoding="utf-8") as f: lines = f.readlines() # 处理表头的电影名称 header = lines[0].strip("\n").split(",") # 直接生成清洗掉末尾空格的电影名称列表,跳过前两列非电影字段 movies = [title.rstrip() for title in header[2:]] # 处理每一行用户偏好数据,跳过表头行 for line in lines[1:]: # 先清洗换行符,再按逗号分割成字段列表 fields = line.strip("\n").split(",") if len(fields) < 2: # 跳过空行避免报错 continue # 取姓名字段 name = fields[1].strip() # 从第三个字段开始是偏好值,逐个转成整数 prefs = [int(p.strip()) for p in fields[2:]] preference[name] = prefs print(movies) return [movies, preference]
额外兼容优化
- 所有字段都增加了通用的空格清洗逻辑,兼容字段前后存在多余空格的脏数据场景
- 增加空行判断,避免数据集存在空行时触发下标越界报错
内容的提问来源于stack exchange,提问作者PYTHONIDIOT
相关产品推荐
相关产品推荐

