1. 编码异常乱码与字符集不匹配数据导入过程中最让人头疼的莫过于打开文件发现满屏乱码。我遇到过最夸张的情况是某次导入CSV文件所有中文字符都变成了锟斤拷——这其实是UTF-8与GBK编码冲突的典型表现。常见错误特征文件打开后显示?或黑色菱形符号中文字符变成乱码组合如锟斤拷烫烫烫报错信息含Invalid byte sequence或编码不支持排查四步法先用file命令检查文件真实编码Linux/Mac适用file -i your_data.csv # 输出示例your_data.csv: text/plain; charsetiso-8859-1在Python中可先用chardet库自动检测import chardet with open(data.csv, rb) as f: print(chardet.detect(f.read()))转换编码时推荐使用iconv工具跨平台方案iconv -f GBK -t UTF-8 original.txt converted.txt数据库导入时特别注意MySQL需设置character_set_client和character_set_connectionPostgreSQL的COPY命令需指定ENCODING UTF8SQL Server建议使用BCP工具时添加-C 65001参数提示遇到0x00字节报错时常见于从Oracle导出的数据可用sed -i s/\x00//g filename清理特殊字符2. 标识列冲突自增主键的陷阱上周刚帮同事解决一个案例从测试环境导出数据到生产环境时所有自增ID全部冲突。这种问题在跨环境迁移时特别常见尤其是SQL Server的IDENTITY列和MySQL的AUTO_INCREMENT字段。典型报错示例Cannot insert explicit value for identity columnDuplicate entry xxx for key PRIMARY无法在只读列插入数据解决方案对比表工具/场景解决方案SQL Server导入时勾选启用标识插入SSMS界面或使用SET IDENTITY_INSERT ONMySQL执行SET session.sql_modeNO_AUTO_VALUE_ON_ZEROPostgreSQL使用ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY临时移除自增属性Python pandas设置if_existsreplace参数或先执行truncate操作实战案例 处理MySQL数据迁移时我习惯用这个组合拳import pandas as pd from sqlalchemy import create_engine engine create_engine(mysql://user:passhost/db) # 先备份原表 pd.read_sql(SELECT * INTO old_table FROM target_table, engine) # 禁用自增检查 engine.execute(SET session.sql_modeNO_AUTO_VALUE_ON_ZERO) # 导入数据 df.to_sql(target_table, engine, if_existsappend, indexFalse)3. 路径解析失败相对路径的坑新手常犯的错误是写死绝对路径比如C:\Users\Name\data.csv结果代码换台机器就报错。更隐蔽的是Python的相对路径问题——脚本在不同目录执行时.表示的路径会变化。经典错误场景No such file or directoryFileNotFoundError: [Errno 2]路径无效常见于Windows系统可靠路径处理方法使用__file__获取当前脚本所在目录import os BASE_DIR os.path.dirname(os.path.abspath(__file__)) data_path os.path.join(BASE_DIR, data/import.csv)跨平台路径构建建议永远用os.path.join()代替手动拼接/或\路径比较时先用os.path.normpath()标准化考虑使用pathlibPython 3.6from pathlib import Path config_path Path(__file__).parent / config / settings.ini容器化环境特别注意事项挂载卷时要确认容器内路径映射关系Docker中建议使用/app/data这类绝对路径Kubernetes配置volumeMounts时注意subPath的使用4. 数据类型不匹配隐式转换的代价数据导入时最隐蔽的坑莫过于类型问题。比如Excel里看着是数字导入后却变成字符串。更可怕的是某些数据库会静默执行类型转换导致精度丢失。典型症状Invalid input syntax for type integerData truncated for column price日期变成乱码或数字浮点数精度丢失如3.14变成3类型检查清单数字类型检查千分位分隔符如1,000需要先去除逗号识别科学计数法表示如1.23E4处理货币符号$123 → 123日期类型明确指定格式如%Y-%m-%dvs%m/%d/%Y处理时区问题建议统一转UTC存储识别特殊值如NULL、N/A布尔值映射是/否、T/F、1/0等不同表示法处理大小写问题True/TRUE/truePython处理示例def clean_number(value): if isinstance(value, str): value value.replace(,, ).strip($€¥) return float(value) if . in str(value) else int(value) def parse_date(date_str): for fmt in (%Y-%m-%d, %m/%d/%Y, %d-%b-%y): try: return datetime.strptime(date_str, fmt).date() except ValueError: continue raise ValueError(fUnknown date format: {date_str})5. 依赖项缺失环境配置的蝴蝶效应最近处理过一个棘手案例开发机运行正常的导入脚本在生产环境报ModuleNotFoundError。原因是测试时用了本地安装的第三方库但服务器环境缺少依赖。常见依赖问题Python包版本冲突如pandas 1.x vs 2.x API变化数据库驱动未安装如psycopg2、mysql-connector系统库缺失如Linux上缺少libxml2环境变量未配置如JAVA_HOME、PATH环境检查方案创建requirements.txt时指定精确版本pandas1.5.3 sqlalchemy2.0.15使用conda管理复杂依赖conda create -n data_import python3.9 conda install -c conda-forge geopandasDocker化部署方案FROM python:3.9-slim RUN apt-get update apt-get install -y libgomp1 COPY requirements.txt . RUN pip install -r requirements.txt WORKDIR /app依赖冲突排查技巧用pipdeptree查看依赖关系图通过python -c import sys; print(sys.path)检查导入路径使用虚拟环境隔离venv或pipenv记得有次调试Oracle数据导入花了三小时才发现是instant client版本不对。现在我的检查清单里一定会包含这些步骤确认ODBC驱动版本、测试tnsping连接、检查环境变量配置。