如何使用Python将含特殊字符的CSV数据存入Redis HSET且避免多余转义斜杠?
解决方案
该问题的核心是CSV读取、JSON序列化两个环节的转义逻辑叠加,导致斜杠被重复转义,Redis本身支持任意普通字符串作为键值,无特殊字符存储限制。你可以按以下步骤处理:
- 第一步:正确读取CSV,禁用自动转义
使用Python标准库csv模块读取文件时,明确关闭不必要的转义配置,避免读取阶段就给斜杠自动加转义:import csv with open("你的数据文件路径.csv", "r", encoding="utf-8") as f: # 按你的文件分隔符指定delimiter,这里是竖线 reader = csv.DictReader(f, delimiter="|", quoting=csv.QUOTE_MINIMAL, escapechar=None) for row in reader: # 清理每个字段前后的多余空白 clean_row = {k.strip(): v.strip() for k, v in row.items() if k.strip()} # 取出首列作为Redis HSET的key hkey = clean_row.pop("city_name") - 第二步:序列化后直接写入Redis
如果你需要存JSON格式的字符串作为值,直接用json.dumps默认配置序列化即可,不要手动做任何转义处理:import json import redis # 初始化Redis连接,decode_responses设为True自动处理bytes转字符串 redis_client = redis.Redis(host="127.0.0.1", port=6379, db=0, decode_responses=True) # 序列化处理后的字段数据 hvalue = json.dumps(clean_row, ensure_ascii=False) # 写入Redis redis_client.hset("你的哈希表名", hkey, hvalue) - 特殊情况处理:如果原始CSV已存在转义斜杠,先做字符串清理
若你的CSV文件中本身已经写入了\\$\\这类预转义的内容,读取后先统一替换多余转义符即可:# 示例:把4个连续反斜杠替换为1个,可根据实际多余斜杠数量调整规则 clean_row["currency"] = clean_row["currency"].replace("\\\\", "\\")
验证注意:存入后请直接用
redis-cli执行HGET 你的哈希表名 Newyork查看存储结果,不要通过Python打印返回值判断,Python打印字符串时会自动给转义符增加显示用的反斜杠,会造成误判。
内容的提问来源于stack exchange,提问作者shivthedev
相关产品推荐
相关产品推荐

