向SQL表加载数据时特殊/转义字符及日文字符的处理方案咨询
解决方案(Python实现示例)
以下方案基于Python生态实现,适配绝大多数REST API拉取数据后写入对象存储CSV的场景。
1. 单字段含日文字符时置为NULL/空值
日文字符覆盖平假名、片假名、日文常用汉字,可通过正则匹配识别:
import re # 日文匹配正则规则 JP_PATTERN = re.compile(r'[\u3040-\u309F\u30A0-\u30FF\u4E00-\u9FFF]') def process_jp_field(field_value): # 字段为空直接返回 if not field_value: return field_value # 匹配到日文字符返回空,可根据需求替换为None return "" if JP_PATTERN.search(str(field_value)) else field_value
调用时遍历单条记录的指定字段,传入函数处理即可。
2. 任意字段含日文字符时删除整条记录
遍历单条记录的所有字段,只要命中日文匹配规则就丢弃该记录:
def filter_jp_record(record: dict) -> bool: """ 入参为单条记录的字典结构,key为字段名,value为字段值 返回True代表保留记录,False代表丢弃 """ for value in record.values(): if JP_PATTERN.search(str(value)): return False return True
处理全量数据时通过列表推导式过滤:valid_records = [r for r in all_records if filter_jp_record(r)]
3. 写入CSV前的转义字符处理
禁止手动处理转义字符,直接使用标准库自带的转义能力即可覆盖所有合规场景:
- 若使用Python标准库
csv模块:指定quoting=csv.QUOTE_MINIMAL参数,模块会自动为包含逗号、双引号、换行符的字段加外层双引号,同时自动转义字段内部的双引号
import csv from io import StringIO buffer = StringIO() writer = csv.DictWriter(buffer, fieldnames=field_list, quoting=csv.QUOTE_MINIMAL) writer.writeheader() writer.writerows(valid_records) # 后续将buffer中的内容上传到Blob容器即可
- 若使用Pandas处理数据:调用
to_csv方法时指定quoting=1参数即可自动完成转义,无需额外处理。
内容的提问来源于stack exchange,提问作者sac
相关产品推荐
相关产品推荐

