translate_new_col.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. import os
  2. import csv
  3. from ai_trans import translate_sentences
  4. from urllib.parse import quote
  5. # 设置 OpenAI API 配置
  6. os.environ['OPENAI_API_KEY'] = 'sk-NscqaCD1PfVm7soEF3C3E6297bE14d7fB595Be8f17F39aFf'
  7. os.environ['OPENAI_API_BASE'] = 'https://aiapi.magong.site/v1'
  8. def create_search_link(value):
  9. """为搜索词创建亚马逊搜索链接"""
  10. return f'=HYPERLINK("https://www.amazon.co.jp/s?k={quote(value)}", "{value}")'
  11. def read_csv(file_path):
  12. """读取CSV文件并返回数据列表"""
  13. encodings = ['utf-8', 'latin-1', 'gbk']
  14. for encoding in encodings:
  15. try:
  16. with open(file_path, mode='r', encoding=encoding) as file:
  17. reader = csv.reader(file)
  18. data = [row for row in reader]
  19. return data
  20. except UnicodeDecodeError:
  21. continue
  22. except Exception as e:
  23. print(f"Error reading CSV file with encoding {encoding}: {e}")
  24. return []
  25. print("Failed to read CSV file with any of the specified encodings.")
  26. return []
  27. def insert_empty_column(data, column_index):
  28. """在指定列之后插入一个空列"""
  29. for row in data:
  30. row.insert(column_index + 1, '') # 插入在目标列后面
  31. return data
  32. def translate_column(data, column_index, start_row=0, target_language='zh'):
  33. """
  34. 翻译指定列的文本,并将结果保存到下一列
  35. :param data: CSV数据列表
  36. :param column_index: 需要翻译的列索引
  37. :param start_row: 开始翻译的行索引,默认为第0行
  38. :param target_language: 目标语言,默认为中文
  39. :return: 翻译后的数据列表
  40. """
  41. sentences_to_translate = [row[column_index] for i, row in enumerate(data[start_row:], start=start_row) if len(row) > column_index]
  42. if sentences_to_translate:
  43. try:
  44. print(f"Translating {len(sentences_to_translate)} sentences to {target_language}.")
  45. print(f"Input sentences: {sentences_to_translate}")
  46. translated_output = translate_sentences(sentences_to_translate, target_language, api_key='YOUR_API_KEY')
  47. print(f"Translated output: {translated_output}")
  48. translations = translated_output.get("translations", [])
  49. for i, row in enumerate(data[start_row:], start=start_row):
  50. if len(row) > column_index and i - start_row < len(translations):
  51. row[column_index + 1] = translations[i - start_row] # 写入到下一列
  52. print(f"Translated row {i}: {row[column_index]} -> {row[column_index + 1]}")
  53. except Exception as e:
  54. print(f"Error translating rows: {e}")
  55. return data
  56. def add_search_links(data, column_index, start_row=0):
  57. """为搜索词列添加超链接"""
  58. for i, row in enumerate(data[start_row:], start=start_row):
  59. if len(row) > column_index:
  60. row[column_index] = create_search_link(row[column_index])
  61. return data
  62. def save_csv(data, file_path):
  63. """将数据保存为CSV文件"""
  64. try:
  65. with open(file_path, mode='w', newline='', encoding='utf-8') as file:
  66. writer = csv.writer(file)
  67. writer.writerows(data)
  68. except Exception as e:
  69. print(f"Error saving CSV file: {e}")
  70. def process_csv(input_file, output_file, column_index, start_row=0, target_language='zh'):
  71. """处理CSV文件的主要函数"""
  72. data = read_csv(input_file)
  73. # 插入空列
  74. data = insert_empty_column(data, column_index)
  75. # 翻译第二列的文本并保存到下一列
  76. data = translate_column(data, column_index, start_row, target_language)
  77. # 为搜索词添加超链接
  78. data = add_search_links(data, column_index, start_row)
  79. # 保存为新文件
  80. save_csv(data, output_file)
  81. if __name__ == "__main__":
  82. input_file = "测试.csv"
  83. output_file = "测试_processed.csv"
  84. column_index = 1 # 插入空列的列索引(第2列)
  85. start_row = 2 # 从第2行开始翻译(通常第0行是标题)
  86. process_csv(input_file, output_file, column_index, start_row)