将CSV文件中的英文批量翻译成中文的 Python 脚本
一个用于翻译 CSV 文件的 Python 脚本,适用于将英文内容批量翻译成中文(或其他语言),并解决文件编码导致的中文乱码和无法翻译的问题。
主要功能:
- 文件编码转换:在翻译之前自动检测并将输入文件转换为 UTF-8 编码,支持多种常见的文件编码格式(如
GBK
、ISO-8859-1
等),避免因编码不一致导致的读取错误。 - 批量翻译:使用 Google 翻译 API(通过
pygtrans
库)批量翻译 CSV 文件中的内容,支持自定义源语言和目标语言。 - 自动编码处理:翻译后将文件保存为
utf-8-sig
编码,确保文件可以在 Windows 系统(如 Excel)中正确显示中文,避免乱码问题。
使用方式:
- 下载或克隆此脚本,并确保安装了所需依赖(
pandas
和pygtrans
)。 - 修改输入和输出 CSV 文件路径。
- 运行脚本,脚本将自动转换编码、翻译内容,并保存翻译后的文件。
这是一个简洁实用的工具,适合需要大批量翻译 CSV 文件内容,并确保文件编码兼容性的用户。
安装依赖:pip install pandas pygtrans
import pandas as pd
from pygtrans import Translate
import os# 转换文件编码到 UTF-8
def convert_to_utf8(input_file, temp_file):try:with open(input_file, 'rb') as f:raw_data = f.read()# 尝试以各种常见编码读取文件for encoding in ['utf-8', 'gbk', 'iso-8859-1', 'latin1']:try:decoded_data = raw_data.decode(encoding)print(f"使用 {encoding} 编码读取文件成功")breakexcept UnicodeDecodeError:continueelse:print("文件编码无法识别")return False# 将文件以 UTF-8 编码写入到临时文件with open(temp_file, 'w', encoding='utf-8') as f:f.write(decoded_data)return Trueexcept Exception as e:print(f"转换文件编码到 UTF-8 失败: {e}")return False# 示例,调整源语言和目标语言设置
def translate_texts(texts, client, source_lang='en', target_lang='zh'):"""批量翻译文本"""try:translations = client.translate(texts, source=source_lang, target=target_lang)translated_texts = [translation.translatedText for translation in translations] for text, translated_text in zip(texts, translated_texts):print(f"原文: {text} -> 翻译: {translated_text}")return translated_textsexcept Exception as e:print(f"翻译失败: {e}")return texts# 翻译 CSV 文件
def translate_csv(input_csv, output_csv):# 临时文件名,用于存储 UTF-8 编码格式的文件temp_csv = "temp_utf8.csv"# 转换输入文件为 UTF-8 编码if not convert_to_utf8(input_csv, temp_csv):print("文件转换失败,无法继续翻译")return# 读取转换后的 CSV 文件print(f"尝试读取文件: {temp_csv}")if not os.path.isfile(temp_csv):print(f"错误: 文件 {temp_csv} 不存在")return# 读取 CSV 文件data = pd.read_csv(temp_csv)print(f"读取数据成功,数据示例: \n{data.head()}")# 创建翻译客户端client = Translate(proxies={'http': 'http://localhost:10809', 'https': 'http://localhost:10809'})# 遍历数据框中的每一列进行翻译for column in data.columns:# 仅翻译字符串类型的单元格texts_to_translate = data[column].dropna().astype(str).tolist()print(f"开始翻译列: {column}")translations = translate_texts(texts_to_translate, client)# 将翻译结果插入数据框中translation_dict = dict(zip(texts_to_translate, translations))data[column] = data[column].apply(lambda x: translation_dict.get(x, x) if isinstance(x, str) else x)# 将翻译后的数据框保存到新的 CSV 文件,使用 'utf-8-sig' 编码data.to_csv(output_csv, index=False, encoding='utf-8-sig')print(f"翻译完成,结果保存到 {output_csv}")if __name__ == "__main__":input_csv = "你要翻译的文件路径"output_csv = "你要输出的文件路径" #这两个路径填的时候注意两点 :1是 都要精确到具体的文件名,2是 路径中不能是反斜杠print(f"输入的 CSV 文件路径: {input_csv}")print(f"输出的 CSV 文件路径: {output_csv}")translate_csv(input_csv, output_csv)