如何用Python 3导入扩展名.csv但存为Unicode Text的Excel文件?
解决CSV后缀实为Unicode Text格式文件的Python导入问题
这种“后缀名和实际格式不匹配”的情况真的很头疼,尤其是要批量处理几百个文件的时候!别担心,咱们一步步来解决:
问题根源
Excel保存的“Unicode Text (*.txt)”格式,本质是UTF-16编码(通常带BOM)+ 制表符分隔的文本文件,但你拿到的文件被改了.csv后缀。之前用csv模块或pandas.read_csv失败,大概率是因为没指定正确的编码和分隔符——默认的utf-8编码和逗号分隔符完全不匹配这种文件。
单个文件导入方案
方法1:用Pandas快速读取
直接指定编码为utf-16(Python会自动识别BOM),分隔符设为制表符\t:
import pandas as pd # 读取文件 df = pd.read_csv("your_file.csv", encoding="utf-16", sep="\t") # 验证数据 print(df.head())
如果遇到编码报错,可以试试utf-16le(Excel保存的Unicode Text大多是小端序):
df = pd.read_csv("your_file.csv", encoding="utf-16le", sep="\t")
方法2:用原生csv模块读取
同样要指定编码和制表符分隔:
import csv with open("your_file.csv", "r", encoding="utf-16") as f: # 指定制表符为分隔符 reader = csv.reader(f, delimiter="\t") # 遍历行数据 for row in reader: print(row)
批量处理几百个文件
用os模块遍历文件夹,批量读取、处理并保存(比如转成真正的CSV格式):
import os import pandas as pd # 替换成你的文件目录 source_dir = "/path/to/your/csv_files" # 替换成处理后文件的保存目录 target_dir = "/path/to/save/processed_files" # 创建目标目录(如果不存在) os.makedirs(target_dir, exist_ok=True) # 遍历所有.csv后缀的文件 for filename in os.listdir(source_dir): if filename.endswith(".csv"): file_path = os.path.join(source_dir, filename) try: # 读取文件 df = pd.read_csv(file_path, encoding="utf-16", sep="\t") # 处理逻辑(比如清洗数据、转换格式等) # 保存为标准CSV save_path = os.path.join(target_dir, f"processed_{filename}") df.to_csv(save_path, index=False, encoding="utf-8") print(f"✅ 成功处理:{filename}") except Exception as e: print(f"❌ 处理失败 {filename}:{str(e)}")
额外提示
- 如果确认文件不含Unicode字符,处理后可以转成
utf-8编码保存,后续操作会更省心; - 若个别文件编码异常,可以尝试用
chardet库检测编码(先安装pip install chardet):
import chardet with open("your_file.csv", "rb") as f: result = chardet.detect(f.read()) print(f"检测到的编码:{result['encoding']}")
内容的提问来源于stack exchange,提问作者jpantina




