brand_add_url_link.py 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import csv
  2. from urllib.parse import quote
  3. from pathlib import Path
  4. def create_hyperlink(value, base_url):
  5. """为给定的值创建亚马逊搜索页面的超链接"""
  6. return f'=HYPERLINK("{base_url}{quote(value)}&__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99", "{value}")'
  7. def create_asin_link(asin):
  8. """为ASIN创建产品详情页链接"""
  9. return f'=HYPERLINK("https://www.amazon.co.jp/dp/{asin}", "{asin}")'
  10. def process_row(row, brand_indices, asin_indices, base_url):
  11. """为指定索引的单元格添加超链接"""
  12. # 处理品牌列
  13. for index in brand_indices:
  14. if index < len(row): # 确保索引在范围内
  15. row[index] = create_hyperlink(row[index], base_url)
  16. # 处理ASIN列
  17. for index in asin_indices:
  18. if index < len(row) and row[index]: # 确保索引在范围内且值不为空
  19. row[index] = create_asin_link(row[index])
  20. return row
  21. def column_letter_to_index(col_letter):
  22. """将Excel列字母转换为0基索引"""
  23. return sum((ord(c) - ord('A') + 1) * (26 ** i) for i, c in enumerate(reversed(col_letter.upper()))) - 1
  24. def read_and_process_csv(input_file, output_file, brand_columns, asin_columns, use_letters=False, base_url='', start_row=0):
  25. """读取CSV文件并处理指定列的数据,然后写入新文件"""
  26. # 确保输出目录存在
  27. output_dir = Path(output_file).parent
  28. output_dir.mkdir(parents=True, exist_ok=True)
  29. with open(input_file, 'r', encoding='utf-8', errors='ignore') as csvfile, \
  30. open(output_file, 'w', newline='', encoding='utf-8') as new_csvfile:
  31. reader = csv.reader(csvfile)
  32. writer = csv.writer(new_csvfile)
  33. headers = next(reader) # 读取标题行
  34. # 写入标题行到新的CSV文件
  35. writer.writerow(headers)
  36. # 获取要处理的列的索引
  37. if use_letters: # 如果使用列字母
  38. brand_indices = [column_letter_to_index(col) for col in brand_columns]
  39. asin_indices = [column_letter_to_index(col) for col in asin_columns]
  40. else: # 如果使用列索引(假设从0开始)
  41. brand_indices = [int(col) for col in brand_columns]
  42. asin_indices = [int(col) for col in asin_columns]
  43. # 遍历每一行并处理
  44. for i, row in enumerate(reader):
  45. if i < start_row:
  46. writer.writerow(row) # 直接写入未处理的行
  47. else:
  48. processed_row = process_row(row, brand_indices, asin_indices, base_url)
  49. writer.writerow(processed_row)
  50. # 定义要处理的CSV文件路径、输出文件路径以及需要添加超链接的列索引或列字母和亚马逊搜索的基础URL
  51. output_dir = Path('temp')
  52. input_csv_path = output_dir / '测试_utf8.csv'
  53. output_csv_path = output_dir / '测试_processed.csv'
  54. brand_columns = ['C', 'D', 'E'] # 品牌列
  55. asin_columns = ['H', 'L', 'P'] # ASIN列
  56. use_letters = True # 是否使用列字母代替索引
  57. amazon_search_base_url = 'https://www.amazon.co.jp/s?k='
  58. start_row = 1 # 从第2行开始处理(索引从0开始)
  59. # 执行CSV处理
  60. read_and_process_csv(input_csv_path, output_csv_path, brand_columns, asin_columns, use_letters, amazon_search_base_url, start_row)