123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- import re
- import openpyxl
- from decimal import Decimal
- import pandas as pd
- from quanguo.detail import parse_hscode
- def chinese_class_to_number(class_str):
- """精确匹配中文类名"""
- cn_num_map = {
- '一': 1, '二': 2, '三': 3, '四': 4, '五': 5, '六': 6, '七': 7, '八': 8, '九': 9,
- '十': 10, '十一': 11, '十二': 12, '十三': 13, '十四': 14, '十五': 15, '十六': 16,
- '十七': 17, '十八': 18, '十九': 19, '二十': 20, '二十一': 21, '二十二': 22
- }
- match = re.match(r'^第([一二三四五六七八九十百千万]+)类$', class_str)
- return cn_num_map.get(match.group(1), 0) if match else 0
- def parse_value(val):
- """数值处理(包含科学计数法处理)"""
- if val in ('-', None, 'None', 'null'):
- return 'NULL'
- try:
- # 处理科学计数法(如1.2E+5)
- if 'E' in str(val).upper():
- return Decimal(f"{float(val):.2f}").quantize(Decimal('0.00'))
- return Decimal(str(val).replace(',', '')).quantize(Decimal('0.00'))
- except Exception as e:
- print(f"数值解析错误:{val},错误:{e}")
- return 'NULL'
- # 数据预处理
- df = pd.read_excel(r"D:/Downloads/2025051809313028789.xls", engine="xlrd")
- df.to_excel("converted.xlsx", index=False)
- wb = openpyxl.load_workbook('converted.xlsx')
- sheet = wb.active
- current_class = None
- year_month = '2025-04'
- sql_scripts = []
- # 遍历所有数据行(示例数据从第7行开始)
- for row_idx, row in enumerate(sheet.iter_rows(min_row=7, values_only=True), start=7):
- if not row[1]: continue
- hs_code = parse_hscode(row[1])
- if not hs_code:
- print(f"[行{row_idx}] 忽略无效行:{row[1]}")
- continue
- # 类行数据插入
- try:
- monthly_export = parse_value(row[2])
- ytd_export = parse_value(row[3])
- monthly_import = parse_value(row[4])
- ytd_import = parse_value(row[5])
- ytd_yoy_export = parse_value(row[6])
- ytd_yoy_import = parse_value(row[7])
- except IndexError as e:
- print(f"行{row_idx} 列索引错误:{e}")
- continue
- sql = f"""INSERT INTO `t_yujin_crossborder_commodity_trade`
- (`year_month`, `hs_code`, `monthly_import`, `monthly_export`,
- `ytd_import`, `ytd_export`, `ytd_yoy_import`, `ytd_yoy_export`)
- VALUES ('{year_month}', '{hs_code}',
- {monthly_import}, {monthly_export},
- {ytd_import}, {ytd_export},
- {ytd_yoy_import}, {ytd_yoy_export})
- ON DUPLICATE KEY UPDATE
- monthly_import = VALUES(monthly_import),
- monthly_export = VALUES(monthly_export),
- ytd_import = VALUES(ytd_import),
- ytd_export = VALUES(ytd_export),
- ytd_yoy_import = VALUES(ytd_yoy_import),
- ytd_yoy_export = VALUES(ytd_yoy_export);"""
- sql_scripts.append(sql)
- continue
- # 结果输出
- with open('../downloads/commodity_trade04.sql', 'w', encoding='utf-8') as f:
- f.write('\n'.join(sql_scripts))
- print(f"生成完成,共处理 {len(sql_scripts)} 条有效记录")
|