You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提升CSV文件跨语言翻译的代码运行效率?

问题:优化CSV翻译转换代码的耗时问题

我的实现方案

将CSV文件转换为XML格式,翻译为目标语言后再转回CSV格式。

原代码

import pandas as pd
import xml.etree.ElementTree as ET
from googletrans import Translator
import xml.etree.ElementTree as ETree
import pandas as pd
import csv

#csv to xml
df= pd.read_csv('Salary Dataset.csv')
with open('outputf.xml', 'w') as myfile: 
  myfile.write(df.to_xml())


tree = ET.parse('outputf.xml')
for elem in tree.iter():
    #print(elem.tag, elem.text)
    if(elem.text):
      translator=Translator()
      translation=translator.translate(elem.text,dest="fr").text
      #elem.text.replace(elem.text,translation)
      elem.text=translation
      #print(elem.text)
tree.write('outputfr.xml', xml_declaration=True, method='xml', encoding="utf8")


xmlp = ETree.XMLParser(encoding="utf-8")
Tree = ETree.parse('outputf.xml',parser=xmlp)
#Hit and trial methods
#xml='/content/output.xml'
#xmltest = ET.fromstring(xml.encode("utf-8"))
#Tree = ETree.parse(xmltest)
#Tree = ETree.parse('/content/outputfr.xml')

root = Tree.getroot()
A=[]
for ele in root:
  B = {}
  for i in list(ele):
    B.update({i.tag: i.text})
    A.append(B)
df = pd.DataFrame(A)
df.drop_duplicates(keep='first', inplace=True)
df.reset_index(drop=True, inplace=True)
writer = csv.writer(open('600.csv', 'w'))
df.to_csv('600.csv')

print("XML FILE CONVERTED SUCESSFULLY")

性能问题

当前该代码运行耗时超过25分钟,其中翻译函数的调用是主要耗时环节,请问有什么方法可以降低这段代码的时间复杂度?

示例数据

公司职位薪资样本数地点薪资
MU Sigma数据科学家105班加罗尔₹6,43,232/年
IBM数据科学家125班加罗尔₹6,21,651/年
TATA数据科学家200班加罗尔₹3,67,282/年
Flipkart数据科学家100班加罗尔₹8,90,567/年
Amazon数据科学家90班加罗尔₹5,45,521/年

优化方案及代码

核心优化点

  • 复用翻译客户端:避免在循环内重复创建Translator实例,减少初始化开销
  • 批量翻译+缓存结果:收集所有需要翻译的去重文本,批量调用翻译接口,同时缓存结果避免重复翻译相同内容
  • 跳过不必要的翻译:数字、公司名、薪资格式这类无需翻译的内容直接保留
  • 移除XML中转:直接操作DataFrame,省去XML文件的IO和解析步骤

优化后代码

import pandas as pd
from googletrans import Translator

# 只初始化一次翻译器,避免重复开销
translator = Translator()

# 直接读取CSV,跳过XML中转步骤
df = pd.read_csv('Salary Dataset.csv')

# 指定需要翻译的列(只翻译文本型字段)
target_cols = ['职位', '地点']

# 收集所有需要翻译的去重文本,减少重复翻译请求
unique_texts = []
for col in target_cols:
    unique_texts.extend(df[col].drop_duplicates().tolist())

# 批量翻译(处理接口长度限制,分块执行)
translation_cache = {}
chunk_size = 100  # 根据接口限制调整
for i in range(0, len(unique_texts), chunk_size):
    chunk = unique_texts[i:i+chunk_size]
    translations = translator.translate(chunk, dest="fr")
    # 构建翻译映射表
    for src_text, trans_result in zip(chunk, translations):
        translation_cache[src_text] = trans_result.text

# 将翻译结果映射回DataFrame
for col in target_cols:
    df[col] = df[col].map(translation_cache)

# 保存最终结果
df.to_csv('600_fr.csv', index=False)
print("翻译完成,结果已保存")

优化效果说明

  1. 批量翻译将数十/数百次HTTP请求合并为几次,直接解决网络请求的耗时瓶颈
  2. 缓存去重文本,避免重复翻译相同内容(比如示例中“数据科学家”重复5次,只翻译1次)
  3. 移除XML中转,省去文件读写和XML解析的额外时间开销
  4. 只翻译需要的字段,避免对数字、格式文本做无效翻译

内容的提问来源于stack exchange,提问作者Hiralal Umesh Kumhar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 09:33:20