如何用Python检查CSV文件指定列中是否存在目标值?
问题分析与解决方案
先梳理你代码里的核心问题,这些问题直接导致查询功能失效:
1. 数据写入函数的参数错误
在this_is_the_code_used_to_write_and_sort_the_data函数中,csv.writer.writerow()要求传入单个可迭代对象(比如列表),但你传入了多个独立参数,这会直接触发报错。另外你变量名存在拼写错误(ver_3、ver_4应为var_3、var_4),修正后的写入代码:
def this_is_the_code_used_to_write_and_sort_the_data(var_1, var_2, var_3, var_4, var_5, var_6): with open('bin/cache/temp.csv', 'a', encoding='UTF8', newline='') as file: writer = csv.writer(file) # 将参数打包为列表传入 writer.writerow([var_1, var_2, var_3, var_4, var_5, var_6]) dataFrame = pd.read_csv('bin/cache/temp.csv') dataFrame.sort_values(["Frame","LED"],axis=0, ascending=True,inplace=True,na_position='first') dataFrame.to_csv('bin/cache/temp.csv', sep=',', encoding='utf-8', index=False)
2. 查询时的类型不匹配
你的Frame列是整数类型,但查询时用了字符串'1',类型不匹配导致无法匹配到任何结果,必须用整数进行比较。
3. 实现指定值存在性检查的功能
修改查询函数,实现检查17是否存在于Frame列,同时可返回匹配的行或索引:
def check_frame_exists(target_frame): df = pd.read_csv('bin/cache/temp.csv') # 直接返回布尔值判断是否存在 exists = target_frame in df['Frame'].values print(f"Frame {target_frame} 是否存在: {exists}") # 获取所有匹配的行 matching_rows = df[df['Frame'] == target_frame] if not matching_rows.empty: print("匹配的行内容:") print(matching_rows) # 获取匹配行的索引列表 matching_indices = matching_rows.index.tolist() print(f"匹配行的索引: {matching_indices}") return exists # 调用函数检查17是否存在 check_frame_exists(17)
额外优化:避免重复写入相同Frame值
如果要防止重复写入,可在写入前先做存在性检查:
def write_data_if_not_exists(var_1, var_2, var_3, var_4, var_5, var_6): df = pd.read_csv('bin/cache/temp.csv') if var_1 not in df['Frame'].values: this_is_the_code_used_to_write_and_sort_the_data(var_1, var_2, var_3, var_4, var_5, var_6) else: print(f"Frame {var_1} 已存在,跳过写入")
内容的提问来源于stack exchange,提问作者Will Jordan
相关产品推荐
相关产品推荐

