5.18脚本更新

This commit is contained in:
2026-05-18 13:45:58 +08:00
parent cc4148b67d
commit b9977b9c13
8 changed files with 1251 additions and 679 deletions
@@ -63,7 +63,7 @@ def ceshi(formData) -> str:
print("生成失败预警!")
cookies_str ="marketingSESSIONID=0ac63d8a-75d0-498f-b8fe-a878331c7489; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2215932094283302236249%22%2C%22first_id%22%3A%2219b11da5605dba-09ce585a75d9ef-26011a51-2073600-19b11da5606f14%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%2219b11da5605dba-09ce585a75d9ef-26011a51-2073600-19b11da5606f14%22%7D; erpLanguage=zh-CN; unp=15932094283302236249; un=15932094283302236249; _up=-NillNN-qyBEJ--t3vnSknvoOF52zvONuckH23g8WuVfVffDo5DQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqE_ATrYol1AAP_PVRv-ZNHu3M-GTc15uzFX6srOVWiusYklXFPBdmrEj9zR-69s-xcmc.; tmall=false; Hm_lvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a=1773372154,1773382507,1773713140,1773741734; HMACCOUNT=350677B71627FB45; prodOrg=16015140731148603474; Hm_lpvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a=1773743099"
cookies_str ="macanSESSIONID=6a135db3-5515-4acf-abf0-6c903afc9391; erpLanguage=zh-CN; prodOrg=11240984669916808518; unp=10907434497511789553; un=10907434497511789553; _up=-NillNN-qyBEJ--t3vnSknvoOFt2zfaJs8kB2nw6W-ZaXvjEoprQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqE_oUr4wj1gUK-_hRv-ZNHu3M-GTZ15i2EXSsquRSjOobl17KOxZsrEj9mB66_c6yTmA.; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2210907434497511789553%22%2C%22first_id%22%3A%2219b6df76a22f46-04a98afdd2a11d8-4c657b58-1327104-19b6df76a2312c7%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%2219b6df76a22f46-04a98afdd2a11d8-4c657b58-1327104-19b6df76a2312c7%22%7D; tmall=false; Hm_lvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a=1778119278,1778823299,1778838735,1779067120; HMACCOUNT=A6A0585E8C70051D; Hm_lpvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a=1779067429"
cookies_str = cookies_str.encode('utf-8').decode('latin-1')
cookie_dict = {item.split('=')[0]: item.split('=')[1]
@@ -75,10 +75,10 @@ headers = {
'origin': 'https://yunxiu.f6car.cn'
}
# 读取excel文件
# data = xlrd.open_workbook(r"D:\Idea Project\F6+宜搭+其它(1)\张阳脚本\模板\套餐卡退卡.xls")
data = xlrd.open_workbook(r"C:\Users\hp_z66\OneDrive\Desktop\钉钉文件\退卡.xls")
data = xlrd.open_workbook(r"D:\Idea Project\F6+宜搭+其它(1)\张阳脚本\模板\套餐卡退卡.xls")
# data = xlrd.open_workbook(r"C:\Users\hp_z66\OneDrive\Desktop\钉钉文件\退卡.xls")
table = data.sheet_by_index(1) # 通过索引顺序获取
table = data.sheet_by_index(0) # 通过索引顺序获取
h = table.nrows
@@ -132,7 +132,7 @@ for i in tqdm(range(1, h)):
"czkList": [],
"paymentList": [
{
"paymentTypeId": "6932687", # 各门店不同 手动更新
"paymentTypeId": "19080776", # 各门店不同 手动更新
"paymentType": "现金",
"paymentAmount": idMember2,
"gatheringType": 0,
@@ -1,12 +1,12 @@
import pandas as pd
import requests
from module import F6_module
import time
from tqdm import tqdm
from pathlib import Path
from datetime import datetime
import json
import traceback
import requests
import json
import time
from datetime import datetime
from tqdm import tqdm
import pandas as pd
import os
#+
# f6_module = F6_module()
@@ -15,23 +15,23 @@ import traceback
# username = "13799889725"
# password = "Lc1234"
# store_name = "禹城榕桦"
module = 2
module = 1
#
# res = f6_module.login_in(username, password, store_name)
# # cookies = requests.utils.dict_from_cookiejar(res.cookies)
cookies = {
'memberSESSIONID': '38d027b4-1f86-44fe-a8d2-2211fbd46394',
'memberSESSIONID': '639e52b2-1260-47a9-8d0b-d0cd41054738',
'erpLanguage': 'zh-CN',
'tmall': 'false',
'Hm_lvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a': '1775553704,1775799422,1776043595,1776153876',
'Hm_lvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a': '1776909170,1776923216,1777270359,1777277857',
'HMACCOUNT': 'A6A0585E8C70051D',
'prodOrg': '11240984669918128522',
'unp': '15851362811188895763',
'un': '15851362811188895763',
'_up': '-NillNN-qyBEJ--t3vnSknvoOF53yPCOts8N0no-Uu9VX_TGoZrQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqE_UXoIgm0QIF_PBRv-ZNHu3M-GTc1p2wFnGqpuxUiOMSmF_GORVsrEj92RzBn7rDYmA.',
'sensorsdata2015jssdkcross': '%7B%22distinct_id%22%3A%2215851362811188895763%22%2C%22first_id%22%3A%2219b6df76a22f46-04a98afdd2a11d8-4c657b58-1327104-19b6df76a2312c7%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%2219b6df76a22f46-04a98afdd2a11d8-4c657b58-1327104-19b6df76a2312c7%22%7D',
'Hm_lpvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a': '1776393475',
'unp': '16023446149142708289',
'un': '16023446149142708289',
'_up': '-NillNN-qyBEJ--t3vnSknvoOF1_z_KJtMsE13I-XuVaVvnDr5DQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqE_QQq4Ml3wcK_PBRv-ZNHu3M-GTf3pqyEXOur-lciO8Yl1bLPBtmrEj90x3BhsH6PGY.',
'sensorsdata2015jssdkcross': '%7B%22distinct_id%22%3A%2216023446149142708289%22%2C%22first_id%22%3A%2219b6df76a22f46-04a98afdd2a11d8-4c657b58-1327104-19b6df76a2312c7%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%2219b6df76a22f46-04a98afdd2a11d8-4c657b58-1327104-19b6df76a2312c7%22%7D',
'prodOrg': '16070511835941490720',
'Hm_lpvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a': '1777428810',
}
print("cookies loaded")
@@ -41,36 +41,98 @@ script_dir = Path(__file__).resolve().parent
output_base = script_dir / f"请求结果_{datetime.now():%Y%m%d_%H%M%S}"
df = pd.read_excel(fr"D:\Idea Project\F6+宜搭+其它(1)\张阳脚本\文件输出\车辆信息.xlsx",sheet_name="Sheet2").astype(str)
df = pd.read_excel(fr"C:\Users\hp_z66\Desktop\客户信息.xlsx",sheet_name="客户信息").astype(str)
if module == 1: # 客户信息删除
# --- 初始化日志列表 ---
delete_logs = [] # 删除操作日志
query_logs = [] # 查询日志
# --- 1. 数据准备 ---
df['手机号码'] = df['手机号码'].astype(str).str.strip().str.replace('.0$', '', regex=True)
df['手机号码'].dropna(inplace=True)
url = "https://yunxiu.f6car.cn/member/customer/listForPermission?pageSize=50000&pageNo=1" # 获取客户信息列表
res = requests.get(url, cookies=cookies)
row = {"ts": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), "module": module, "action": "customer_list", "url": url}
row["status_code"] = getattr(res, "status_code", None)
row["ok"] = getattr(res, "ok", None)
# 将需要删除的手机号转为集合,查询速度更快
phones_to_delete = set(df['手机号码'].values)
print(f"待删除手机号数量: {len(phones_to_delete)}")
# --- 2. 分页查询所有客户 ---
base_url = "https://yunxiu.f6car.cn/member/customer/listForPermission"
id_own_org = "16070511835941490720"
page_size = 100
page_no = 1
all_customers = []
print("正在获取所有客户数据...")
while True:
params = {
"idOwnOrg": id_own_org,
"pageSize": page_size,
"pageNo": page_no
}
try:
row["response_json"] = json.dumps(res.json(), ensure_ascii=False)
except Exception:
try:
row["response_text"] = res.text
except Exception:
row["response_text"] = None
request_results.append(row)
res = requests.get(base_url, params=params, cookies=cookies)
query_log = {
"ts": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
"module": module,
"action": "customer_list_page",
"url": res.url,
"page_no": page_no
}
query_log["status_code"] = getattr(res, "status_code", None)
query_log["ok"] = getattr(res, "ok", None)
data = res.json()
for item in tqdm(data['data']['data']):
query_log["response_json"] = json.dumps(data, ensure_ascii=False)
request_results.append(query_log)
query_logs.append(query_log)
# 获取当前页的数据列表
page_data = data.get('data', {}).get('data', [])
# 如果当前页没有数据了,说明已经取完,跳出循环
if not page_data:
print(f"{page_no} 页没有数据了,获取完毕。")
break
all_customers.extend(page_data)
print(f"已获取第 {page_no} 页,共 {len(page_data)} 条数据。累计获取: {len(all_customers)}")
page_no += 1
time.sleep(0.5)
except Exception as e:
print(f"获取第 {page_no} 页数据时出错: {e}")
error_log = {
"ts": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
"module": module,
"action": "customer_list_error",
"page_no": page_no,
"error": str(e)
}
query_logs.append(error_log)
break
# --- 3. 遍历所有客户并执行删除 ---
print(f"开始处理删除操作,共需检查 {len(all_customers)} 个客户...")
success_count = 0
failed_count = 0
for item in tqdm(all_customers):
try:
idCustomer = item['idCustomer']
phone = item['cellPhone']
phone_clean = str(phone).strip().replace('.0', '')
if phone in df['手机号码'].values:
print("删除:", phone)
url = f"https://yunxiu.f6car.cn/member/customer/{idCustomer}" # 客户信息删除url
res = requests.delete(url, cookies=cookies) # 客户信息删除
row = {
# 检查手机号是否在待删除列表中
if phone_clean in phones_to_delete:
print(f"\n正在删除: {phone_clean}")
url = f"https://yunxiu.f6car.cn/member/customer/{idCustomer}"
# 记录删除开始
delete_log = {
"ts": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
"module": module,
"action": "customer_delete",
@@ -78,23 +140,122 @@ if module == 1: # 客户信息删除
"idCustomer": idCustomer,
"cellPhone": phone_clean,
}
row["status_code"] = getattr(res, "status_code", None)
row["ok"] = getattr(res, "ok", None)
res = requests.delete(url, cookies=cookies)
delete_log["status_code"] = getattr(res, "status_code", None)
delete_log["ok"] = getattr(res, "ok", None)
# 解析响应
try:
row["response_json"] = json.dumps(res.json(), ensure_ascii=False)
response_data = res.json()
delete_log["response_json"] = json.dumps(response_data, ensure_ascii=False)
delete_log["response_code"] = response_data.get('code', '')
delete_log["response_msg"] = response_data.get('msg', '')
except Exception:
try:
row["response_text"] = res.text
except Exception:
row["response_text"] = None
request_results.append(row)
print(res.json(), idCustomer, phone)
time.sleep(3)
delete_log["response_text"] = res.text
delete_log["response_code"] = ''
delete_log["response_msg"] = '响应解析失败'
# 判断删除是否成功
if res.ok and delete_log.get("response_code") == 200:
delete_log["delete_status"] = "成功"
success_count += 1
print(f"✓ 成功删除: {phone_clean}")
else:
# print("不删除:", phone)
pass
delete_log["delete_status"] = "失败"
failed_count += 1
print(f"✗ 删除失败: {phone_clean}")
request_results.append(delete_log)
delete_logs.append(delete_log)
# 打印详细结果
try:
print(response_data)
except:
idCustomer = item['idCustomer']
print(res.text[:200]) # 只打印前200个字符
time.sleep(3)
except Exception as e:
# 记录异常情况
error_log = {
"ts": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
"module": module,
"action": "customer_delete_error",
"idCustomer": item.get('idCustomer', '未知'),
"cellPhone": phone_clean if 'phone_clean' in locals() else item.get('cellPhone', '未知'),
"error": str(e),
"delete_status": "异常"
}
delete_logs.append(error_log)
failed_count += 1
print(f"处理客户 {item.get('idCustomer', '未知')} 时出错: {e}")
# --- 4. 保存日志到Excel文件 ---
print("\n正在保存日志文件...")
# 创建日志目录
log_dir = "delete_logs"
if not os.path.exists(log_dir):
os.makedirs(log_dir)
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
# 保存删除操作日志
if delete_logs:
df_delete_logs = pd.DataFrame(delete_logs)
# 选择要保存的列(可根据需要调整)
columns_to_save = [
"ts", "action", "idCustomer", "cellPhone",
"delete_status", "status_code", "ok",
"response_code", "response_msg", "error"
]
# 只保存存在的列
existing_columns = [col for col in columns_to_save if col in df_delete_logs.columns]
df_delete_logs = df_delete_logs[existing_columns]
delete_log_file = f"{log_dir}/删除操作日志_{timestamp}.xlsx"
df_delete_logs.to_excel(delete_log_file, index=False, engine='openpyxl')
print(f"删除操作日志已保存到: {delete_log_file}")
# 保存查询日志
if query_logs:
df_query_logs = pd.DataFrame(query_logs)
query_log_file = f"{log_dir}/查询日志_{timestamp}.xlsx"
df_query_logs.to_excel(query_log_file, index=False, engine='openpyxl')
print(f"查询日志已保存到: {query_log_file}")
# 保存汇总信息
summary_data = {
"项目": ["待删除手机号数量", "查询到的客户总数", "实际执行删除数", "删除成功", "删除失败", "执行时间"],
"数值": [
len(phones_to_delete),
len(all_customers),
success_count + failed_count,
success_count,
failed_count,
datetime.now().strftime("%Y-%m-%d %H:%M:%S")
]
}
df_summary = pd.DataFrame(summary_data)
summary_file = f"{log_dir}/删除汇总_{timestamp}.xlsx"
df_summary.to_excel(summary_file, index=False, engine='openpyxl')
print(f"删除汇总已保存到: {summary_file}")
# 打印最终统计
print("\n" + "=" * 50)
print("删除操作完成!")
print(f"待删除手机号: {len(phones_to_delete)}")
print(f"查询到客户总数: {len(all_customers)}")
print(f"实际执行删除: {success_count + failed_count}")
print(f"删除成功: {success_count}")
print(f"删除失败/异常: {failed_count}")
print(f"日志文件保存在: {log_dir}/ 目录下")
print("=" * 50)
if module == 2: # 客户车辆信息删除
for index, row in tqdm(df.iterrows(), total=len(df)):
+256 -100
View File
@@ -9,7 +9,7 @@ token = "Bearer qygHulymo1fekJk4CIZyNKjyQAzG8CFN"
class API:
def entry_data_list(self, data: dict, replace: bool = False, max_retries: int = 20) -> Dict: # 获取多条表单数据
def entry_data_list(self, data: dict, replace: bool = False, max_retries: int = 5) -> Dict: # 获取多条表单数据
"""
获取多条表单数据
:param max_retries: 最大重试次数
@@ -69,7 +69,7 @@ class API:
return final_data
@staticmethod
def workflow_instance_get(data: dict, max_retries: int = 20) -> dict:
def workflow_instance_get(data: dict, max_retries: int = 5) -> dict:
"""
查询实例流程信息
:param max_retries:
@@ -185,7 +185,7 @@ class API:
return None
@staticmethod
def entry_data_update(data: dict, max_retries: int = 20) -> dict: # 修改数据
def entry_data_update(data: dict, max_retries: int = 5) -> dict: # 修改数据
"""
修改数据
:param max_retries: 最大重试次数,此处设置100次
@@ -324,14 +324,10 @@ class BossPermissionAutoApproval:
# 在df1中查找匹配的所有功能
matched_functions = df1[df1['权限功能'] == perm_functions] # 假设df1中有'权限功能'列
# 如果没有匹配项,至少添加权限功能本身
# 如果没有匹配项,跳过这条记录
if matched_functions.empty:
all_data.append({
"数据id": data_id,
"门店编码": org_code,
"权限功能": perm_functions,
"一级分类": None # 或者可以设为perm本身
})
print(f"跳过:权限功能 '{perm_functions}' 在映射表中找不到匹配")
continue
else:
# 添加所有匹配的功能
for _, func_row in matched_functions.iterrows():
@@ -424,6 +420,12 @@ class BossPermissionAutoApproval:
'containTest': True,
}
# 跳过空门店编码
if not code or str(code).strip() == "" or pd.isna(code):
print(f"跳过空门店编码")
code_to_company_id[code] = None
continue
try:
response = requests.post(
'https://manage.f6yc.com/hive-admin/org/getAllOrgList',
@@ -434,8 +436,12 @@ class BossPermissionAutoApproval:
)
response.raise_for_status() # 检查请求是否成功
response_json = response.json()
data = response_json.get("data", {})
records = data.get("records", [])
# 兼容废弃与停用门店
if len(response.json().get("data").get("records",[]))==0:
if len(records) == 0:
json_data['orgStatus'] = 1 # 停用
response = requests.post(
'https://manage.f6yc.com/hive-admin/org/getAllOrgList',
@@ -444,7 +450,11 @@ class BossPermissionAutoApproval:
json=json_data,
timeout=10
)
if len(response.json().get("data").get("records",[]))==0:
response_json = response.json()
data = response_json.get("data", {})
records = data.get("records", [])
if len(records) == 0:
json_data['orgStatus'] = 2 # 废弃
response = requests.post(
'https://manage.f6yc.com/hive-admin/org/getAllOrgList',
@@ -453,11 +463,22 @@ class BossPermissionAutoApproval:
json=json_data,
timeout=10
)
response_json = response.json()
data = response_json.get("data", {})
records = data.get("records", [])
# 提取company_id并存储到字典
company_id = response.json()['data']['records'][0]['groupId']
if len(records) > 0:
company_id = records[0].get('groupId')
if company_id:
code_to_company_id[code] = company_id
print(f"成功查询: 门店编码 {code} -> company_id {company_id}")
else:
print(f"查询结果异常: 门店编码 {code}, groupId为空")
code_to_company_id[code] = None
else:
print(f"查询失败: 门店编码 {code}, 未找到匹配的公司(可能已注销)")
code_to_company_id[code] = None
except Exception as e:
print(f"查询失败: 门店编码 {code}, 错误: {str(e)}")
@@ -583,10 +604,20 @@ class BossPermissionAutoApproval:
print(e)
def update_permission(self, df):
"""优化版:按门店聚合,减少请求频率"""
if df is None or df.empty:
return pd.DataFrame(columns=["数据id", "门店编码", "一级分类", "二级分类", "权限", "开关", "状态"])
# 检查 cookies 数据是否存在
if not self.get_cookies or len(self.get_cookies) == 0:
print("错误:cookies 数据为空")
return pd.DataFrame(columns=["数据id", "门店编码", "一级分类", "二级分类", "权限", "开关", "状态"])
cookie_str = self.get_cookies[0].get("_widget_1757558743223")
if not cookie_str:
print("错误:cookie 字符串为空")
return pd.DataFrame(columns=["数据id", "门店编码", "一级分类", "二级分类", "权限", "开关", "状态"])
cookies = {}
items = cookie_str.split('; ')
for item in items:
@@ -607,82 +638,178 @@ class BossPermissionAutoApproval:
'sec-fetch-site': 'same-origin',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0',
'x-requested-with': 'XMLHttpRequest',
# 'cookie': 'hive-adminSESSIONID=531d2ecb-893b-471c-8cf9-e76a9dcfa789; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%224210192048793363%22%2C%22first_id%22%3A%221989d4783646e1-07c9f1a149173e8-4c657b58-2073600-1989d4783651ade%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%221989d4783646e1-07c9f1a149173e8-4c657b58-2073600-1989d4783651ade%22%7D; _yg_prod=EkX_f7K7eYt61spccZtpCE7FGQAxK5DfP_4PB6A0jCrCT1LYfszIPQQqjcJjPPEZL0J2pO07cfp8VG-4XSfqBfYzvRdjXVIjT2D3fZ7X80GeyA8J24qvVma_W4j__vTE3I3zSTbNFRCPiizeGHdACpZXbli5aTRA; _oauth2_proxy=GdOm_1P1BJAoCcjMngUI40McDBpFqkL2vO_GTniJq-QGX6z9l3MieVkOjJJVJiDbEh5U-j6h3SmxsEjWuaOlfsJyWPx6muVdQOPavFTnd8TCr5-0Hz5xYOQncD1IqIGILgkejOJ3127iUvvu--dYjyqKiDwbtEGCN-Gb21Ik6hkb61C4OBppUra1XbJQ7kOXJnZdlBMe8FiMnlkYVOL8zJ1ZDLIzUcsyzq2s1ACRdVZFT8WU7JLhXKRvoiQSSm6qkCYPsuxGLudtHMeJibtvT8IGNp-jdvv8SF5gzomGhd1Abt_4YfCjiGznNbu421biQI866hEiPTjAZPai0EC-5E0VOi8NmfrBIxaqWx4ecIEGM6Z_8G-4ZWJVBNIv3v9AfUPANYR37yC-w8rOYYv9X2FV0YMkGqFoOKJWBnw4JbdxtdI-8UodAIQGUYVeJGLt6zOWWRNdzKeK57Z8X3Aki0CmLaP0SSUjoGW1pMJayMar94eQpzXszBVQxX_-_buXoDtXYg-u5q5jnQrXX3SLXC8W5JNY_sbDWm2ix7H2ezcxp2gypyyPnFMA5gRneE9wcLAWFtkb_YwT3Q_1KD4rUltqNBBV85KCOR77lxGXMYSEANPvJRW8mC9jg9ARD0JyvA1ZHWefjNU_Y_6RsKSiHrH5Cg5k8QU8skF-KgQrFUKGVfjWfpRfDO6IpR_z2lD-6qfwAshliwrFKyqJi1M91bdZuLR1dXubkgSNVXzyKkgjnGZ-4Ma9K8M3iLQwgBE1DoCRv92C-ie7sI3MmJ58vwu3OllkcOkiz7NjYzv1LKIIKTVEU7wgGe0SGKuEoRO2vRBOZcw_NUUW6s9SbwKleCXdsHkth2EFigiF9E7CGGdyw2G5qO1nx5nKIgEhhqPEBs6yq1uPEcza_BT_J5BauG_ffjpWrRR8TaoMFrmJFPdOf4JDON6FPukb4sbo_uANPG3tSpwNiefTv0E4QV7jNyNNOeGlhLxhcWyN2E6LZTOWH8lnVNUl6oLbSnrkcDGAV9Q76nebHhn5Yf6qJY4S1CceJwFlpIlooiz1bUWzt906c1UUcrFgxEydHMKbmScaG2S_dSjvfB76ZFgozWIGQiiZnd1bt8G7pc2VxMVW-szebBoeUf0HzPpzkej-ILRunt-E9Mpq-3afCOtbda0RfZWqR8cQsAt-cABPIdi4WT5v-Cg_jrjxBb8mueXbWZ5Q4gNPjsVmkfnpW5svBf8bKdChTbNyq_KOm2NV9itI6RSAVkIo6ANUBe9npnCs66v6hSQmmqjqbZ3H4GX1HiyT6VlFpTxT1xDry3tZsTZqw9lzvnT7Tin1lIxArQc0LnlZAoVbbLDJJlbfrXXcIF1kcClfXw5d_Smy_tfGOo5kYE9iTmfMOMh-8ZfhhjA43P4kMgSrYdQAvW1fHFMVQtqtHTmUiCSsKQ78Phh3-ampoI83iJooVzH34Yg21cv5wHpAJAn_wVC_Weto-bol3XXZkDHG0DWmoMGROViNkxc0vKxpMubwiG36E-U-1tQXsyhqqa6VqE_Vnn3fizk9m-ZgozyN-VlS5ALV6djm1wa-ISaLv9juHjQlfA0joY6ZLOxM6mcGsZliw9ZQ-mhiy1C9c3vOuPLW3ZWRCeJUX96BaA-5am-3Z3bjK1mp391cXle3idTEPFlMCKNVUUANNFwxeH0W6CKL4rcRkgiEnhWuBEADySvpfCFuYxojH2uOSfS8mCERpZ7KNEgPCIVs9VumX68w8QonxClCQLWG6JRAmfmCfYKi6UeeWWvsqQDPqQiMkowThSv_TmLgFh5baZsB9bJwFqojc6pOzM3ogHuHuY_67VsA8E_cmeeWvBzqWBV9umeciWq5fbC3Cqe_fAsHxtKb39D2vQyqWVjRk9qukzxBmcd8bXzKUV1r6lg0QgVm2PG8dyfAV_ymsR6Y4b_gtPWcVx83J5H8RgN43ofGXwdUFsqi5xnc_Bf-KO_psGgYImKnqU25ftV8eX0ss0K7jsyhafsWDwPSg2k7qHPNK2AbtLGZIQcRcjXe7efTICAeHOn9AJ4vUbU1UpO53WsY8gic1I7tEH0LKkg7Pz7rR7drDuYkDg200gXiO7y5FXl1dqGa-tilF9IL57hx3UcuM7mLZa5zU0bPprhmCelSA4CwG8la5yGUdpvBqBSz22-X-DgkrwCzLpchi_LnpAkx2_jza2yTO5PtCSjn7hFbvuNFm6Neb_AuRg6-TpolwGfl-Bu3nUySmnCoCH8IvAoA4BpXzFH7o21cAlEHdKAndnoEljtyoyxa6DAZoG5Osttn71tbudyEFh26eOiA-wGAbpHJnsg3Slp35gicLgAepJ8oDFAaqdhtyP7-jizBCCB-Bt29hqvWwH22J30wgoXKnJgjFl6F9L4hxmvRi2QHWKV35ITGA1JqrS0VayT9DIrbTUKoRIKzTme0Z5deBxB8YFmiINAEqdS86PCbQi28-tK2RYuvFJ4O_RWxrMxD1fnDhbPWhnDGiY9dGmDjPgWB70vtIVaikGr_M_Bwm_3oa7ec00eTaSnjmX1qzLCLdvX_Ie6hBFgDii7ZU-KrQndqcbLYU9KtkI2yVwXWMihlLzdxNukzuxnU4IK334Mtebpz6ykLX8e8UfvbHJx4D_JgQQKB7Gfoxb-O02owUY6bvR-tgTp8n9-Mic9osDWeBgmmPHmvyNjcWbi4SXdBSVVIML12iS7qvjHlekG01r_EalttUe000hU1MLqE_Kd1XcINRq0vZaed5m6fXEUVcPchVYN9GC7e36HMo7ZlgE0fGNsWY6pFr-seXI2_23UJW9l_edhMqpvJJh5CAJYMRQ-Rtvzfbe8n|1757554489|NPRgqlI6umo48ScNrekwcxSuAvgFZbVOWWnkmHcAJww=',
}
result_list = []
df.to_csv(fr"D:\Idea Project\F6+宜搭+其它(1)\张阳脚本\文件输出\门店含id权限功能映射.csv", index=False)
print(f"=== update_permission 调试信息 ===")
print(f"原始数据行数: {len(df)}")
print(f"数据列名: {df.columns.tolist()}")
if "开关" not in df.columns:
print("错误:数据中没有'开关'")
return pd.DataFrame(columns=["数据id", "门店编码", "一级分类", "二级分类", "权限", "开关", "状态"])
df.dropna(subset=['开关'], inplace=True)
for index, row in df.iterrows():
print(row)
if row["company_id"] is None:
continue
if row["门店编码"] == "空门店编码" or row["门店编码"] is None:
result_list.append(
{
df_filtered = df.dropna(subset=['开关']).copy()
print(f"过滤空开关后的数据行数: {len(df_filtered)}")
if len(df_filtered) == 0:
print("警告:过滤后没有数据需要处理")
return pd.DataFrame(columns=["数据id", "门店编码", "一级分类", "二级分类", "权限", "开关", "状态"])
# ========== 核心优化:按company_id聚合 ==========
# 过滤掉company_id为空的行
df_valid = df_filtered[df_filtered['company_id'].notna()].copy()
if len(df_valid) == 0:
print("没有有效的company_id,跳过所有处理")
return pd.DataFrame(columns=["数据id", "门店编码", "一级分类", "二级分类", "权限", "开关", "状态"])
# 按 company_id 分组
grouped = df_valid.groupby('company_id')
print(f"开始处理 {len(grouped)} 个门店的权限...")
for company_id, group in grouped:
print(f"\n===== 处理门店 company_id: {company_id},共 {len(group)} 条权限 =====")
# 1. 获取当前门店的菜单状态(只请求一次)
params = {'groupId': company_id}
try:
response = requests.get(
'https://manage.f6yc.com/hive-admin/company/role/getGroupAdminRoleMenusScope',
params=params,
cookies=cookies,
headers=headers,
timeout=10
)
if response.status_code != 200:
print(f"错误:获取菜单状态失败,状态码: {response.status_code}")
# 该门店所有权限都标记为失败
for _, row in group.iterrows():
result_list.append({
"数据id": row["数据id"],
"门店编码": row["门店编码"],
"一级分类": row["一级分类"],
"二级分类": row["二级分类"],
"权限": row["权限"],
"开关": row["开关"],
"状态": "空门店编码跳过执行",
}
)
continue
if row["一级分类"] is not None:
params = {
'groupId': row["company_id"],
}
"状态": f"获取菜单状态失败 {response.status_code}",
})
continue # 跳过这个门店,处理下一个
response_json = response.json()
data = response_json.get("data")
if not data:
# 可能是cookie过期,发送预警
payload = {
"api_key": "6694d3c4fcb69ca9a111a6c4",
"entry_id": "68cb745753594c2570ba4f70",
"data": {
"_widget_1758164058473": {"value": "Boss权限自动审批"},
"_widget_1758164058474": {"value": f"cookies信息失效,请更新cookie"}
},
"is_start_workflow": "true"
}
API().data_batch_create(payload)
# 标记所有行为cookie失效
for _, row in group.iterrows():
result_list.append({
"数据id": row["数据id"],
"门店编码": row["门店编码"],
"一级分类": row["一级分类"],
"二级分类": row["二级分类"],
"权限": row["权限"],
"开关": row["开关"],
"状态": "cookies失效",
})
continue
menus_list = data.get("menus", [])
print(f"菜单项数: {len(menus_list)}")
except Exception as e:
print(f"获取菜单状态异常: {str(e)}")
for _, row in group.iterrows():
result_list.append({
"数据id": row["数据id"],
"门店编码": row["门店编码"],
"一级分类": row["一级分类"],
"二级分类": row["二级分类"],
"权限": row["权限"],
"开关": row["开关"],
"状态": f"获取菜单异常: {str(e)}",
})
continue
# 2. 在同一个menus_list上应用该门店的所有权限变更
has_modification = False # 标记是否有实际修改
for _, row in group.iterrows():
print(f" 应用权限: {row['一级分类']} > {row['二级分类']} > {row['权限']} = {row['开关']}")
if row['一级分类'] is None:
continue
response = requests.get(
'https://manage.f6yc.com/hive-admin/company/role/getGroupAdminRoleMenusScope',
params=params,
cookies=cookies,
headers=headers,
)
# print(response.json())
if response.status_code == 200:
pkId = response.json().get("data").get("role").get("id")
user_name = response.json().get("data").get("role").get("name")
menus_list = response.json().get("data").get("menus")
for menu in menus_list:
if menu.get("name") == row["一级分类"]:
nodes_list = menu.get("nodes")
if row["开关"] == "": # 确保一级权限为开
# 处理一级分类
if row["开关"] == "":
menu["isChecked"] = 1
has_modification = True
print(f" 开启一级分类: {row['一级分类']}")
for node in nodes_list:
for node in menu.get("nodes", []):
if node.get("name") == row["二级分类"]:
child_nodes_list = node.get("nodes", [])
print(row["二级分类"], row["权限"], row[""])
if row["开关"] == "": # 确保二级权限为开
# 处理二级分类
if row["开关"] == "":
if node.get("isChecked") != 1:
node["isChecked"] = 1
has_modification = True
print(f" 开启二级分类: {row['二级分类']}")
if row["权限"] != "":
# 处理三级权限的情况
for child_node in child_nodes_list:
# 处理三级权限
for child_node in node.get("nodes", []):
if child_node.get("name") == row["权限"]:
if row["开关"] == "":
print("更新权限:", child_node["id"], "为开")
child_node["isChecked"] = 1
new_value = 1 if row["开关"] == "" else 0
if child_node.get("isChecked") != new_value:
child_node["isChecked"] = new_value
has_modification = True
print(f" {'开启' if new_value else '关闭'}三级权限: {row['权限']}")
break
else:
child_node["isChecked"] = 0
break # 找到对应的权限后跳出循环
else:
print(row["二级分类"], row["权限"], row["开关"], 11111111111)
# 处理只有二级权限的情况
if row["开关"] == "":
node["isChecked"] = 1
else:
node["isChecked"] = 0
# 同时更新所有子节点的状态
for child_node in child_nodes_list:
child_node["isChecked"] = node["isChecked"]
# 无三级权限时,统一设置二级及子节点
new_value = 1 if row["开关"] == "" else 0
if node.get("isChecked") != new_value:
node["isChecked"] = new_value
has_modification = True
for child_node in node.get("nodes", []):
if child_node.get("isChecked") != new_value:
child_node["isChecked"] = new_value
has_modification = True
break # 找到匹配的二级分类后跳出
break # 找到匹配的一级分类后跳出
# 查询isChecked为1的id
# 3. 如果没有实际修改,直接标记该门店所有权限为成功
if not has_modification:
print(f" 门店 {company_id} 无实际权限变更,跳过更新请求")
for _, row in group.iterrows():
result_list.append({
"数据id": row["数据id"],
"门店编码": row["门店编码"],
"一级分类": row["一级分类"],
"二级分类": row["二级分类"],
"权限": row["权限"],
"开关": row["开关"],
"状态": "无需更新(权限已生效)",
})
continue
# 4. 收集所有选中ID并发送更新请求(只发送一次)
checked_ids = []
def collect_checked_ids(items):
@@ -693,60 +820,89 @@ class BossPermissionAutoApproval:
collect_checked_ids(item["nodes"])
collect_checked_ids(menus_list)
checked_ids_str = ",".join(checked_ids)
print(f"更新后选中项的ID: {checked_ids_str}")
print(f" 选中ID数量: {len(checked_ids)}")
# 5. 发送POST更新请求
role = data.get("role", {})
pk_id = role.get("id")
user_name = role.get("name")
if not pk_id or not user_name:
print(f" 错误:无法获取pkId或user_name")
for _, row in group.iterrows():
result_list.append({
"数据id": row["数据id"],
"门店编码": row["门店编码"],
"一级分类": row["一级分类"],
"二级分类": row["二级分类"],
"权限": row["权限"],
"开关": row["开关"],
"状态": "响应数据异常",
})
continue
new_json_data = {
"pkId": pkId,
"pkId": pk_id,
"name": user_name,
'isValid': 1,
"menuStr": checked_ids_str,
}
# 添加重试机制
max_retries = 3
update_success = False
update_error_msg = ""
for retry in range(max_retries):
try:
response = requests.post(
'https://manage.f6yc.com/hive-admin/company/role/update',
cookies=cookies,
headers=headers,
json=new_json_data,
timeout=30 # 增加超时时间,因为参数可能很长
)
time.sleep(0.5)
print(f"请求结果:{response.json()}")
if response.json().get("code", 1000) == 200:
result_list.append(
{
result = response.json()
print(f" 更新请求结果 (重试{retry + 1}/{max_retries}): {result}")
if result.get("code") == 200:
update_success = True
break
elif result.get("code") == 500:
update_error_msg = f"服务器内部错误 (500)"
if retry < max_retries - 1:
wait_time = (retry + 1) * 2 # 递增等待时间:2s, 4s, 6s
print(f" 500错误,{wait_time}秒后重试...")
time.sleep(wait_time)
else:
update_error_msg = f"更新失败 code={result.get('code')}: {result.get('message')}"
break
except Exception as e:
update_error_msg = f"更新异常: {str(e)}"
if retry < max_retries - 1:
wait_time = (retry + 1) * 2
print(f" 请求异常,{wait_time}秒后重试...")
time.sleep(wait_time)
# 6. 记录该门店所有权限的结果
status = "更新成功" if update_success else f"更新失败: {update_error_msg}"
for _, row in group.iterrows():
result_list.append({
"数据id": row["数据id"],
"门店编码": row["门店编码"],
"一级分类": row["一级分类"],
"二级分类": row["二级分类"],
"权限": row["权限"],
"开关": row["开关"],
"状态": "更新成功",
}
)
else:
result_list.append(
{
"数据id": row["数据id"],
"门店编码": row["门店编码"],
"一级分类": row["一级分类"],
"二级分类": row["二级分类"],
"权限": row["权限"],
"开关": row["开关"],
"状态": "更新失败",
}
)
else:
payload = {
"api_key": "6694d3c4fcb69ca9a111a6c4",
"entry_id": "68cb745753594c2570ba4f70",
"data": {"_widget_1758164058473": {"value": "Boss权限自动审批"}, # 预警类型
"_widget_1758164058474": {"value": f"cookies信息失效,请更新cookie"}
# 预警内容
},
"is_start_workflow": "true"
}
res = API().data_batch_create(payload)
"状态": status,
})
# 7. 门店之间添加延时,避免请求过快
time.sleep(1)
result_df = pd.DataFrame(result_list)
return result_df
+290 -177
View File
@@ -6,8 +6,8 @@
"metadata": {
"collapsed": true,
"ExecuteTime": {
"end_time": "2026-01-29T03:44:29.227796600Z",
"start_time": "2026-01-29T03:44:28.870218900Z"
"end_time": "2026-04-22T07:31:42.910929700Z",
"start_time": "2026-04-22T07:31:37.243473300Z"
}
},
"source": [
@@ -37,8 +37,8 @@
"\n",
"# 示例:读取 Excel 文件\n",
"def process_excel_file(file_path):\n",
" df = pd.read_excel(file_path, engine='openpyxl') # 支持 .xlsx\n",
" # df = pd.read_excel(file_path, engine='xlrd') # 支持 .xlsx\n",
" # df = pd.read_excel(file_path, engine='openpyxl') # 支持 .xlsx\n",
" df = pd.read_excel(file_path, engine='xlrd') # 支持 .xlsx\n",
" print(\"原始数据:\")\n",
" print(df.head())\n",
"\n",
@@ -68,40 +68,81 @@
" print(\"\\n已保存清洗后的文件:cleaned_output.csv\")\n",
" return df_cleaned\n",
"\n",
"file_path = fr\"C:\\Users\\hp_z66\\Desktop\\钉钉文件\\储值卡信息匹配后文件.xlsx\"\n",
"file_path = fr\"C:\\Users\\hp_z66\\OneDrive\\Desktop\\钉钉文件\\客户车辆信息老六_可导入.xls\"\n",
"process_excel_file(file_path)"
],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"原始数据:\n",
" 客户姓名 性别 车牌号 手机号码 标签 VIN码 车身颜色 备注 车辆所有人 发动机号 \\\n",
"0 1 NaN 豫S38065 13174646666 NaN NaN NaN NaN NaN NaN \n",
"1 先生 NaN 黑A92RS8 15004617481 NaN LMGAA1C51F1096393 NaN NaN NaN NaN \n",
"2 先生 NaN 黑F05145 15244670275 NaN LSJW56761KG020310 NaN NaN NaN NaN \n",
"3 先生 NaN 黑AV101M 18904650318 NaN LFV3A23C6G3051709 NaN NaN NaN NaN \n",
"4 1 NaN 黑A1G3U7 13069966234 NaN NaN NaN NaN NaN NaN \n",
"\n",
" ... 会员号 可用积分 累计获取积分 专属门店 专属顾问 客户推广员工 注册日期 发证日期 车辆来源 车辆推广员工 \n",
"0 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"1 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"2 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"3 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"4 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"\n",
"[5 rows x 37 columns]\n",
"\n",
"清洗后数据(已移除 4 字节字符):\n",
" 客户姓名 性别 车牌号 手机号码 标签 VIN码 车身颜色 备注 车辆所有人 发动机号 \\\n",
"0 1 NaN 豫S38065 13174646666 NaN NaN NaN NaN NaN NaN \n",
"1 先生 NaN 黑A92RS8 15004617481 NaN LMGAA1C51F1096393 NaN NaN NaN NaN \n",
"2 先生 NaN 黑F05145 15244670275 NaN LSJW56761KG020310 NaN NaN NaN NaN \n",
"3 先生 NaN 黑AV101M 18904650318 NaN LFV3A23C6G3051709 NaN NaN NaN NaN \n",
"4 1 NaN 黑A1G3U7 13069966234 NaN NaN NaN NaN NaN NaN \n",
"\n",
" ... 会员号 可用积分 累计获取积分 专属门店 专属顾问 客户推广员工 注册日期 发证日期 车辆来源 车辆推广员工 \n",
"0 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"1 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"2 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"3 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"4 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"\n",
"[5 rows x 37 columns]\n",
"\n",
"已保存清洗后的文件:cleaned_output.xlsx\n"
]
},
{
"data": {
"text/plain": [
" 卡名称 关联模板ID 持卡人姓名 持卡人手机号 绑定车牌号 卡号 可用门店 \\\n",
"0 储值卡 12147360560970768475 刘斌 18299152198 新A9KW77 18299152198 全部 \n",
"1 储值卡 12147360560970768475 张怀彬 13319992628 新F54991 8883939 全部 \n",
"2 储值卡 12147360560970768475 刘君君 15292780801 新F1861P 8883933 全部 \n",
"3 储值卡 12147360560970768475 热那提 18699990750 新FD2D08 18699990750 全部 \n",
"4 储值卡 12147360560970768475 安斌 13779519897 新F9010Q 13779519897 全部 \n",
".. ... ... ... ... ... ... ... \n",
"721 储值卡 12147360560970768475 陈轲 13095118455 新A125YK 9990223 全部 \n",
"722 储值卡 12147360560970768475 姜海南 18999586345 新F7V551 9990232 全部 \n",
"723 储值卡 12147360560970768475 买力侧 13679950078 新F16J72 13679950078 全部 \n",
"724 储值卡 12147360560970768475 王子煜 15109991005 新FF32122 8883965 全部 \n",
"725 储值卡 12147360560970768475 贵小军 18999588628 新F6616L 8889762 全部 \n",
" 客户姓名 性别 车牌号 手机号码 标签 VIN码 车身颜色 备注 车辆所有人 \\\n",
"0 1 NaN 豫S38065 13174646666 NaN NaN NaN NaN NaN \n",
"1 先生 NaN 黑A92RS8 15004617481 NaN LMGAA1C51F1096393 NaN NaN NaN \n",
"2 先生 NaN 黑F05145 15244670275 NaN LSJW56761KG020310 NaN NaN NaN \n",
"3 先生 NaN 黑AV101M 18904650318 NaN LFV3A23C6G3051709 NaN NaN NaN \n",
"4 1 NaN 黑A1G3U7 13069966234 NaN NaN NaN NaN NaN \n",
"... ... .. ... ... .. ... ... .. ... \n",
"9917 陈双 NaN 黑AQ293H 13019712562 NaN LSYBCAAA4CW070101 NaN NaN NaN \n",
"9918 奇瑞 NaN 黑AG21X5 18346069680 NaN LS5A3DBE5GA136962 NaN NaN NaN \n",
"9919 奇瑞 NaN 黑A8DC02 18346069680 NaN LVVDA11A3AD070555 NaN NaN NaN \n",
"9920 戴洪太 NaN 黑A579B1 18346262816 NaN LSVGX46R7E2049499 NaN NaN NaN \n",
"9921 高先生 NaN 黑AH2R02 13796072678 NaN LGBP12E04CY105879 NaN NaN NaN \n",
"\n",
" 卡有效期 剩余面额 剩余实额 服务顾问 售卡门店 售卡日期 卡说明 使用条款 \n",
"0 2025-03-24 200.0 200.0 NaN 伊宁车友 2024-03-24 NaN NaN \n",
"1 2025-02-12 10.0 10.0 NaN 伊宁车友 2021-05-07 NaN NaN \n",
"2 2024-05-09 260.0 260.0 NaN 伊宁车友 2021-03-28 NaN NaN \n",
"3 2026-01-25 500.0 500.0 NaN 伊宁车友 2021-01-25 NaN NaN \n",
"4 2025-12-31 29.8 29.8 NaN 伊宁车友 2020-12-30 NaN NaN \n",
".. ... ... ... ... ... ... ... ... \n",
"721 2026-03-06 334.0 334.0 NaN 伊宁车友 2017-10-29 NaN NaN \n",
"722 2026-07-17 430.0 430.0 NaN 伊宁车友 2017-04-09 NaN NaN \n",
"723 2027-12-14 200.0 0.0 NaN 伊宁车友 2022-12-14 NaN NaN \n",
"724 2027-07-02 1000.0 0.0 NaN 伊宁车友 2022-07-02 NaN NaN \n",
"725 2026-11-24 230.0 0.0 NaN 伊宁车友 2021-05-22 NaN NaN \n",
" 发动机号 ... 会员号 可用积分 累计获取积分 专属门店 专属顾问 客户推广员工 注册日期 发证日期 车辆来源 车辆推广员工 \n",
"0 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"1 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"2 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"3 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"4 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"... ... ... .. ... ... ... ... ... ... ... ... ... \n",
"9917 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"9918 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"9919 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"9920 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"9921 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"\n",
"[726 rows x 15 columns]"
"[9922 rows x 37 columns]"
],
"text/html": [
"<div>\n",
@@ -122,111 +163,147 @@
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>卡名称</th>\n",
" <th>关联模板ID</th>\n",
" <th>持卡人姓名</th>\n",
" <th>持卡人手机号</th>\n",
" <th>绑定车牌号</th>\n",
" <th>卡号</th>\n",
" <th>可用门店</th>\n",
" <th>卡有效期</th>\n",
" <th>剩余面额</th>\n",
" <th>剩余实额</th>\n",
" <th>服务顾问</th>\n",
" <th>售卡门店</th>\n",
" <th>售卡日期</th>\n",
" <th>卡说明</th>\n",
" <th>使用条款</th>\n",
" <th>客户姓名</th>\n",
" <th>性别</th>\n",
" <th>车牌号</th>\n",
" <th>手机号</th>\n",
" <th>标签</th>\n",
" <th>VIN码</th>\n",
" <th>车身颜色</th>\n",
" <th>备注</th>\n",
" <th>车辆所有人</th>\n",
" <th>发动机号</th>\n",
" <th>...</th>\n",
" <th>会员号</th>\n",
" <th>可用积分</th>\n",
" <th>累计获取积分</th>\n",
" <th>专属门店</th>\n",
" <th>专属顾问</th>\n",
" <th>客户推广员工</th>\n",
" <th>注册日期</th>\n",
" <th>发证日期</th>\n",
" <th>车辆来源</th>\n",
" <th>车辆推广员工</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>储值卡</td>\n",
" <td>12147360560970768475</td>\n",
" <td>刘斌</td>\n",
" <td>18299152198</td>\n",
" <td>新A9KW77</td>\n",
" <td>18299152198</td>\n",
" <td>全部</td>\n",
" <td>2025-03-24</td>\n",
" <td>200.0</td>\n",
" <td>200.0</td>\n",
" <td>1</td>\n",
" <td>NaN</td>\n",
" <td>豫S38065</td>\n",
" <td>13174646666</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>伊宁车友</td>\n",
" <td>2024-03-24</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>储值卡</td>\n",
" <td>12147360560970768475</td>\n",
" <td>张怀彬</td>\n",
" <td>13319992628</td>\n",
" <td>新F54991</td>\n",
" <td>8883939</td>\n",
" <td>全部</td>\n",
" <td>2025-02-12</td>\n",
" <td>10.0</td>\n",
" <td>10.0</td>\n",
" <td>先生</td>\n",
" <td>NaN</td>\n",
" <td>黑A92RS8</td>\n",
" <td>15004617481</td>\n",
" <td>NaN</td>\n",
" <td>LMGAA1C51F1096393</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>伊宁车友</td>\n",
" <td>2021-05-07</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>储值卡</td>\n",
" <td>12147360560970768475</td>\n",
" <td>刘君君</td>\n",
" <td>15292780801</td>\n",
" <td>新F1861P</td>\n",
" <td>8883933</td>\n",
" <td>全部</td>\n",
" <td>2024-05-09</td>\n",
" <td>260.0</td>\n",
" <td>260.0</td>\n",
" <td>先生</td>\n",
" <td>NaN</td>\n",
" <td>黑F05145</td>\n",
" <td>15244670275</td>\n",
" <td>NaN</td>\n",
" <td>LSJW56761KG020310</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>伊宁车友</td>\n",
" <td>2021-03-28</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>储值卡</td>\n",
" <td>12147360560970768475</td>\n",
" <td>热那提</td>\n",
" <td>18699990750</td>\n",
" <td>新FD2D08</td>\n",
" <td>18699990750</td>\n",
" <td>全部</td>\n",
" <td>2026-01-25</td>\n",
" <td>500.0</td>\n",
" <td>500.0</td>\n",
" <td>先生</td>\n",
" <td>NaN</td>\n",
" <td>黑AV101M</td>\n",
" <td>18904650318</td>\n",
" <td>NaN</td>\n",
" <td>LFV3A23C6G3051709</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>伊宁车友</td>\n",
" <td>2021-01-25</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>储值卡</td>\n",
" <td>12147360560970768475</td>\n",
" <td>安斌</td>\n",
" <td>13779519897</td>\n",
" <td>新F9010Q</td>\n",
" <td>13779519897</td>\n",
" <td>全部</td>\n",
" <td>2025-12-31</td>\n",
" <td>29.8</td>\n",
" <td>29.8</td>\n",
" <td>1</td>\n",
" <td>NaN</td>\n",
" <td>黑A1G3U7</td>\n",
" <td>13069966234</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>伊宁车友</td>\n",
" <td>2020-12-30</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
@@ -247,128 +324,164 @@
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>721</th>\n",
" <td>储值卡</td>\n",
" <td>12147360560970768475</td>\n",
" <td>陈轲</td>\n",
" <td>13095118455</td>\n",
" <td>新A125YK</td>\n",
" <td>9990223</td>\n",
" <td>全部</td>\n",
" <td>2026-03-06</td>\n",
" <td>334.0</td>\n",
" <td>334.0</td>\n",
" <th>9917</th>\n",
" <td>陈双</td>\n",
" <td>NaN</td>\n",
" <td>黑AQ293H</td>\n",
" <td>13019712562</td>\n",
" <td>NaN</td>\n",
" <td>LSYBCAAA4CW070101</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>伊宁车友</td>\n",
" <td>2017-10-29</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>722</th>\n",
" <td>储值卡</td>\n",
" <td>12147360560970768475</td>\n",
" <td>姜海南</td>\n",
" <td>18999586345</td>\n",
" <td>新F7V551</td>\n",
" <td>9990232</td>\n",
" <td>全部</td>\n",
" <td>2026-07-17</td>\n",
" <td>430.0</td>\n",
" <td>430.0</td>\n",
" <th>9918</th>\n",
" <td>奇瑞</td>\n",
" <td>NaN</td>\n",
" <td>黑AG21X5</td>\n",
" <td>18346069680</td>\n",
" <td>NaN</td>\n",
" <td>LS5A3DBE5GA136962</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>伊宁车友</td>\n",
" <td>2017-04-09</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>723</th>\n",
" <td>储值卡</td>\n",
" <td>12147360560970768475</td>\n",
" <td>买力侧</td>\n",
" <td>13679950078</td>\n",
" <td>新F16J72</td>\n",
" <td>13679950078</td>\n",
" <td>全部</td>\n",
" <td>2027-12-14</td>\n",
" <td>200.0</td>\n",
" <td>0.0</td>\n",
" <th>9919</th>\n",
" <td>奇瑞</td>\n",
" <td>NaN</td>\n",
" <td>黑A8DC02</td>\n",
" <td>18346069680</td>\n",
" <td>NaN</td>\n",
" <td>LVVDA11A3AD070555</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>伊宁车友</td>\n",
" <td>2022-12-14</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>724</th>\n",
" <td>储值卡</td>\n",
" <td>12147360560970768475</td>\n",
" <td>王子煜</td>\n",
" <td>15109991005</td>\n",
" <td>新FF32122</td>\n",
" <td>8883965</td>\n",
" <td>全部</td>\n",
" <td>2027-07-02</td>\n",
" <td>1000.0</td>\n",
" <td>0.0</td>\n",
" <th>9920</th>\n",
" <td>戴洪太</td>\n",
" <td>NaN</td>\n",
" <td>黑A579B1</td>\n",
" <td>18346262816</td>\n",
" <td>NaN</td>\n",
" <td>LSVGX46R7E2049499</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>伊宁车友</td>\n",
" <td>2022-07-02</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>725</th>\n",
" <td>储值卡</td>\n",
" <td>12147360560970768475</td>\n",
" <td>贵小军</td>\n",
" <td>18999588628</td>\n",
" <td>新F6616L</td>\n",
" <td>8889762</td>\n",
" <td>全部</td>\n",
" <td>2026-11-24</td>\n",
" <td>230.0</td>\n",
" <td>0.0</td>\n",
" <th>9921</th>\n",
" <td>高先生</td>\n",
" <td>NaN</td>\n",
" <td>黑AH2R02</td>\n",
" <td>13796072678</td>\n",
" <td>NaN</td>\n",
" <td>LGBP12E04CY105879</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>伊宁车友</td>\n",
" <td>2021-05-22</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>726 rows × 15 columns</p>\n",
"<p>9922 rows × 37 columns</p>\n",
"</div>"
]
},
"execution_count": 7,
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 7
"execution_count": 2
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"display_name": "F6+宜搭+其它",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
"pygments_lexer": "ipython3",
"version": "3.13.11"
}
},
"nbformat": 4,
File diff suppressed because one or more lines are too long
@@ -14,8 +14,8 @@
"metadata": {
"collapsed": true,
"ExecuteTime": {
"end_time": "2026-03-24T03:12:19.747274800Z",
"start_time": "2026-03-24T02:42:20.660416400Z"
"end_time": "2026-04-23T08:20:44.296733100Z",
"start_time": "2026-04-23T08:16:24.431928500Z"
}
},
"source": [
@@ -26,17 +26,16 @@
"\n",
"# Cookie 和 Headers 配置\n",
"cookies = {\n",
" 'acw_tc': '76b20f7917743149845914058ebc47559507cd60c8642e0d54dbe45b6da222',\n",
" 'Hm_lvt_684c22b31d0037eca5a691cde16370ad': '1773130169,1774314982',\n",
" 'Hm_lpvt_684c22b31d0037eca5a691cde16370ad': '1774314982',\n",
" 'HMACCOUNT': 'A6A0585E8C70051D',\n",
" 'e_token': 'f44423067c184689a19eb9dc564bf33e',\n",
" 'acw_tc': '76b20ff917769316546828414e03f43fa61f25e670b6f93f0480d1876ff447',\n",
" 'e_token': '3734b115f75f41ba8534f6780317e904',\n",
" 'weixin_token': 'Y',\n",
" 'e_c': 'NTQ0MzQ1MDE0MTA3ODA1Mg==',\n",
" 'e_i_o_c_n': 'JTIyJUU1JTlCJTlCJUU0JUJDJTlBJUU1JUI4JTgyJUU4JThEJUEzJUU5JUFBJThGJUU2JUIxJUJEJUU4JUJEJUE2JUU3JUJCJUI0JUU0JUJGJUFFJUU0JUI4JUFEJUU1JUJGJTgzJTVCKzIwMDM5MDYrJTVEJTIy',\n",
" 'e_i_p_c_n': 'JTIyJUU5JUE5JUIwJUU1JThBJUEwJUU2JUIxJUJEJUU4JUJEJUE2JUU2JTlDJThEJUU1JThBJUExJUU0JUI4JUFEJUU1JUJGJTgzJUU1JTlCJTlCJUU0JUJDJTlBJUU1JUI4JTgyJUU2JUEzJTk1JUU2JUE2JTg4JUU1JTlCJUFEJUU1JUJBJTk3JUU1JUJBJTk3JUU0JUI4JUJCJTVCKzIwMjk5MDkrJTVEJTIy',\n",
" 'e_c': 'MjEwNjQxMDIzMTY2ODczNjc0',\n",
" 'e_i_o_c_n': 'JTIyJUU5JUE5JUIwJUU1JThBJUEwJUU2JUIxJUJEJUU4JUJEJUE2JUU2JTlDJThEJUU1JThBJUExJUU0JUI4JUFEJUU1JUJGJTgzJUU2JUIxJTlGJUU1JThDJTk3JUU1JThDJUJBJUU2JTlGJUIzJUU1JUIyJUI4JUU4JUI3JUFGJUU1JUJBJTk3JTVCKzIwMDU2MzQrJTVEJTIy',\n",
" 'e_i_p_c_n': 'JTIyJUU5JUE5JUIwJUU1JThBJUEwJUU2JUIxJUJEJUU4JUJEJUE2JUU2JTlDJThEJUU1JThBJUExJUU0JUI4JUFEJUU1JUJGJTgzJUU2JUIxJTlGJUU1JThDJTk3JUU1JThDJUJBJUU2JTlGJUIzJUU1JUIyJUI4JUU4JUI3JUFGJUU1JUJBJTk3JUU1JUJBJTk3JUU5JTk1JUJGJTVCKzIwMjg3NTcrJTVEJTIy',\n",
"}\n",
"\n",
"\n",
"headers = {\n",
" 'Accept': 'application/json, text/plain, */*',\n",
" 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',\n",
@@ -56,7 +55,7 @@
"\n",
"\n",
"all_data = []\n",
"for i in tqdm(range(1, 2019)):\n",
"for i in tqdm(range(1, 372)):\n",
" json_data = {\n",
" 'pageStart': i,\n",
" 'pageNums': 10,\n",
@@ -81,11 +80,11 @@
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 2018/2018 [29:27<00:00, 1.14it/s]\n"
"100%|██████████| 371/371 [04:12<00:00, 1.47it/s]\n"
]
}
],
"execution_count": 2
"execution_count": 1
},
{
"cell_type": "markdown",
@@ -100,8 +99,8 @@
"id": "51f8f4b21505280a",
"metadata": {
"ExecuteTime": {
"end_time": "2026-03-24T07:37:35.090160900Z",
"start_time": "2026-03-24T05:31:09.783019900Z"
"end_time": "2026-04-23T08:36:56.349271400Z",
"start_time": "2026-04-23T08:20:44.300734900Z"
}
},
"source": [
@@ -113,15 +112,13 @@
"# ================= 配置区域 =================\n",
"# Cookie 和 Headers 配置\n",
"cookies = {\n",
" 'acw_tc': '76b20f7917743149845914058ebc47559507cd60c8642e0d54dbe45b6da222',\n",
" 'Hm_lvt_684c22b31d0037eca5a691cde16370ad': '1773130169,1774314982',\n",
" 'Hm_lpvt_684c22b31d0037eca5a691cde16370ad': '1774314982',\n",
" 'HMACCOUNT': 'A6A0585E8C70051D',\n",
" 'e_token': 'f44423067c184689a19eb9dc564bf33e',\n",
" 'acw_tc': '76b20ff917769316546828414e03f43fa61f25e670b6f93f0480d1876ff447',\n",
" 'e_token': '3734b115f75f41ba8534f6780317e904',\n",
" 'weixin_token': 'Y',\n",
" 'e_c': 'NTQ0MzQ1MDE0MTA3ODA1Mg==',\n",
" 'e_i_o_c_n': 'JTIyJUU1JTlCJTlCJUU0JUJDJTlBJUU1JUI4JTgyJUU4JThEJUEzJUU5JUFBJThGJUU2JUIxJUJEJUU4JUJEJUE2JUU3JUJCJUI0JUU0JUJGJUFFJUU0JUI4JUFEJUU1JUJGJTgzJTVCKzIwMDM5MDYrJTVEJTIy',\n",
" 'e_i_p_c_n': 'JTIyJUU5JUE5JUIwJUU1JThBJUEwJUU2JUIxJUJEJUU4JUJEJUE2JUU2JTlDJThEJUU1JThBJUExJUU0JUI4JUFEJUU1JUJGJTgzJUU1JTlCJTlCJUU0JUJDJTlBJUU1JUI4JTgyJUU2JUEzJTk1JUU2JUE2JTg4JUU1JTlCJUFEJUU1JUJBJTk3JUU1JUJBJTk3JUU0JUI4JUJCJTVCKzIwMjk5MDkrJTVEJTIy',\n",
" 'e_c': 'MjEwNjQxMDIzMTY2ODczNjc0',\n",
" 'e_i_o_c_n': 'JTIyJUU5JUE5JUIwJUU1JThBJUEwJUU2JUIxJUJEJUU4JUJEJUE2JUU2JTlDJThEJUU1JThBJUExJUU0JUI4JUFEJUU1JUJGJTgzJUU2JUIxJTlGJUU1JThDJTk3JUU1JThDJUJBJUU2JTlGJUIzJUU1JUIyJUI4JUU4JUI3JUFGJUU1JUJBJTk3JTVCKzIwMDU2MzQrJTVEJTIy',\n",
" 'e_i_p_c_n': 'JTIyJUU5JUE5JUIwJUU1JThBJUEwJUU2JUIxJUJEJUU4JUJEJUE2JUU2JTlDJThEJUU1JThBJUExJUU0JUI4JUFEJUU1JUJGJTgzJUU2JUIxJTlGJUU1JThDJTk3JUU1JThDJUJBJUU2JTlGJUIzJUU1JUIyJUI4JUU4JUI3JUFGJUU1JUJBJTk3JUU1JUJBJTk3JUU5JTk1JUJGJTVCKzIwMjg3NTcrJTVEJTIy',\n",
"}\n",
"\n",
"headers = {\n",
@@ -145,9 +142,9 @@
"\n",
"# 业务参数配置\n",
"TARGET_URL = 'https://teds.tyreplus.com.cn/api/aftersales/payment/queryPaymentSettlementListByCondition'\n",
"STORE_CODES = [\"330522\", \"343280\"] # 门店列表\n",
"STORE_CODES = [\"350085\"] # 门店列表\n",
"PAGE_SIZE = 10\n",
"OUTPUT_PATH = r\"D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\13822673880结算单.xlsx\"\n",
"OUTPUT_PATH = r\"D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\15888527505结算单.xlsx\"\n",
"MAX_RETRIES = 3\n",
"\n",
"# ================= 功能函数 =================\n",
@@ -272,43 +269,15 @@
"output_type": "stream",
"text": [
"正在获取第 1 页数据以计算总记录数...\n",
"✅ 获取成功。总记录数: 43728\n",
"📄 预计总页数: 4373 (每页 10 条)\n"
"✅ 获取成功。总记录数: 8310\n",
"📄 预计总页数: 831 (每页 10 条)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在爬取结算单: 33%|███▎ | 1441/4373 [38:12<1:29:11, 1.83s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1442页请求失败 (尝试 1/3): ('Connection aborted.', ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None))\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在爬取结算单: 51%|█████ | 2241/4373 [1:02:36<1:01:42, 1.74s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第2242页请求失败 (尝试 1/3): ('Connection aborted.', ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None))\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在爬取结算单: 100%|██████████| 4373/4373 [2:05:27<00:00, 1.72s/it] \n"
"正在爬取结算单: 100%|██████████| 831/831 [16:01<00:00, 1.16s/it]\n"
]
},
{
@@ -316,12 +285,12 @@
"output_type": "stream",
"text": [
"\n",
"🎉 数据已成功保存至: D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\13822673880结算单.xlsx\n",
"📊 共保存 43730 条记录 (期望: 43728)\n"
"🎉 数据已成功保存至: D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\15888527505结算单.xlsx\n",
"📊 共保存 8310 条记录 (期望: 8310)\n"
]
}
],
"execution_count": 3
"execution_count": 2
},
{
"cell_type": "markdown",
@@ -336,8 +305,8 @@
"id": "b7e0d7a4da6c9b03",
"metadata": {
"ExecuteTime": {
"end_time": "2026-03-25T10:15:04.125375900Z",
"start_time": "2026-03-24T12:31:05.631170600Z"
"end_time": "2026-04-23T12:43:38.281667400Z",
"start_time": "2026-04-23T08:36:56.424636200Z"
}
},
"source": [
@@ -347,15 +316,13 @@
"import time\n",
"\n",
"cookies = {\n",
" 'acw_tc': '76b20f7917743149845914058ebc47559507cd60c8642e0d54dbe45b6da222',\n",
" 'Hm_lvt_684c22b31d0037eca5a691cde16370ad': '1773130169,1774314982',\n",
" 'Hm_lpvt_684c22b31d0037eca5a691cde16370ad': '1774314982',\n",
" 'HMACCOUNT': 'A6A0585E8C70051D',\n",
" 'e_token': 'f44423067c184689a19eb9dc564bf33e',\n",
" 'acw_tc': '76b20ff917769316546828414e03f43fa61f25e670b6f93f0480d1876ff447',\n",
" 'e_token': '3734b115f75f41ba8534f6780317e904',\n",
" 'weixin_token': 'Y',\n",
" 'e_c': 'NTQ0MzQ1MDE0MTA3ODA1Mg==',\n",
" 'e_i_o_c_n': 'JTIyJUU1JTlCJTlCJUU0JUJDJTlBJUU1JUI4JTgyJUU4JThEJUEzJUU5JUFBJThGJUU2JUIxJUJEJUU4JUJEJUE2JUU3JUJCJUI0JUU0JUJGJUFFJUU0JUI4JUFEJUU1JUJGJTgzJTVCKzIwMDM5MDYrJTVEJTIy',\n",
" 'e_i_p_c_n': 'JTIyJUU5JUE5JUIwJUU1JThBJUEwJUU2JUIxJUJEJUU4JUJEJUE2JUU2JTlDJThEJUU1JThBJUExJUU0JUI4JUFEJUU1JUJGJTgzJUU1JTlCJTlCJUU0JUJDJTlBJUU1JUI4JTgyJUU2JUEzJTk1JUU2JUE2JTg4JUU1JTlCJUFEJUU1JUJBJTk3JUU1JUJBJTk3JUU0JUI4JUJCJTVCKzIwMjk5MDkrJTVEJTIy',\n",
" 'e_c': 'MjEwNjQxMDIzMTY2ODczNjc0',\n",
" 'e_i_o_c_n': 'JTIyJUU5JUE5JUIwJUU1JThBJUEwJUU2JUIxJUJEJUU4JUJEJUE2JUU2JTlDJThEJUU1JThBJUExJUU0JUI4JUFEJUU1JUJGJTgzJUU2JUIxJTlGJUU1JThDJTk3JUU1JThDJUJBJUU2JTlGJUIzJUU1JUIyJUI4JUU4JUI3JUFGJUU1JUJBJTk3JTVCKzIwMDU2MzQrJTVEJTIy',\n",
" 'e_i_p_c_n': 'JTIyJUU5JUE5JUIwJUU1JThBJUEwJUU2JUIxJUJEJUU4JUJEJUE2JUU2JTlDJThEJUU1JThBJUExJUU0JUI4JUFEJUU1JUJGJTgzJUU2JUIxJTlGJUU1JThDJTk3JUU1JThDJUJBJUU2JTlGJUIzJUU1JUIyJUI4JUU4JUI3JUFGJUU1JUJBJTk3JUU1JUJBJTk3JUU5JTk1JUJGJTVCKzIwMjg3NTcrJTVEJTIy',\n",
"}\n",
"\n",
"headers = {\n",
@@ -376,7 +343,7 @@
" # 'Cookie': 'acw_tc=76b20f7917743149845914058ebc47559507cd60c8642e0d54dbe45b6da222; Hm_lvt_684c22b31d0037eca5a691cde16370ad=1773130169,1774314982; Hm_lpvt_684c22b31d0037eca5a691cde16370ad=1774314982; HMACCOUNT=A6A0585E8C70051D; e_token=f44423067c184689a19eb9dc564bf33e; weixin_token=Y; e_c=NTQ0MzQ1MDE0MTA3ODA1Mg==; e_i_o_c_n=JTIyJUU1JTlCJTlCJUU0JUJDJTlBJUU1JUI4JTgyJUU4JThEJUEzJUU5JUFBJThGJUU2JUIxJUJEJUU4JUJEJUE2JUU3JUJCJUI0JUU0JUJGJUFFJUU0JUI4JUFEJUU1JUJGJTgzJTVCKzIwMDM5MDYrJTVEJTIy; e_i_p_c_n=JTIyJUU5JUE5JUIwJUU1JThBJUEwJUU2JUIxJUJEJUU4JUJEJUE2JUU2JTlDJThEJUU1JThBJUExJUU0JUI4JUFEJUU1JUJGJTgzJUU1JTlCJTlCJUU0JUJDJTlBJUU1JUI4JTgyJUU2JUEzJTk1JUU2JUE2JTg4JUU1JTlCJUFEJUU1JUJBJTk3JUU1JUJBJTk3JUU0JUI4JUJCJTVCKzIwMjk5MDkrJTVEJTIy',\n",
"}\n",
"\n",
"df = pd.read_excel(fr\"D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\13822673880结算单.xlsx\", sheet_name='Sheet1')\n",
"df = pd.read_excel(fr\"D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\15888527505结算单.xlsx\", sheet_name='Sheet1')\n",
"\n",
"all_data_list = []\n",
"all_service_data = []\n",
@@ -464,12 +431,12 @@
{
"data": {
"text/plain": [
" 0%| | 0/43730 [00:00<?, ?it/s]"
" 0%| | 0/8310 [00:00<?, ?it/s]"
],
"application/vnd.jupyter.widget-view+json": {
"version_major": 2,
"version_minor": 0,
"model_id": "2475aaf2f08b4f3f9b6915bcbc30a4fc"
"model_id": "f91b10f941ab425bb47b2b50c721ccd3"
}
},
"metadata": {},
@@ -482,21 +449,13 @@
"name": "stdout",
"output_type": "stream",
"text": [
"请求异常: ('Connection aborted.', ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None)) (paymentNo: SI2511031810785166)\n",
"请求异常: ('Connection aborted.', ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None)) (paymentNo: SI2510121646331912)\n",
"请求异常: ('Connection aborted.', ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None)) (paymentNo: SI2504251333197830)\n",
"请求异常: HTTPSConnectionPool(host='teds.tyreplus.com.cn', port=443): Read timed out. (read timeout=10) (paymentNo: SI2504251333197185)\n",
"HTTP 请求失败,状态码: 504 (paymentNo: SI2504251328192860)\n",
"请求异常: ('Connection aborted.', ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None)) (paymentNo: SI2504251327191463)\n",
"HTTP 请求失败,状态码: 502 (paymentNo: SI2504251326190989)\n",
"请求异常: ('Connection aborted.', ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None)) (paymentNo: SI2504251320185538)\n",
"请求异常: ('Connection aborted.', ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None)) (paymentNo: SI2504251319184980)\n",
"HTTP 请求失败,状态码: 502 (paymentNo: SI2504251316180693)\n",
"请求异常: HTTPSConnectionPool(host='teds.tyreplus.com.cn', port=443): Read timed out. (read timeout=10) (paymentNo: SI2504251302159764)\n"
"HTTP 请求失败,状态码: 502 (paymentNo: SI2511041053790586)\n",
"请求异常: HTTPSConnectionPool(host='teds.tyreplus.com.cn', port=443): Max retries exceeded with url: /api/v2/aftersales/payment/queryPaymentSettlementDetail (Caused by ConnectTimeoutError(<HTTPSConnection(host='teds.tyreplus.com.cn', port=443) at 0x194ab953c50>, 'Connection to teds.tyreplus.com.cn timed out. (connect timeout=10)')) (paymentNo: SI2511011255731172)\n",
"请求异常: HTTPSConnectionPool(host='teds.tyreplus.com.cn', port=443): Max retries exceeded with url: /api/v2/aftersales/payment/queryPaymentSettlementDetail (Caused by ConnectTimeoutError(<HTTPSConnection(host='teds.tyreplus.com.cn', port=443) at 0x194ab9539d0>, 'Connection to teds.tyreplus.com.cn timed out. (connect timeout=10)')) (paymentNo: SI2504160329323760)\n"
]
}
],
"execution_count": 5
"execution_count": 3
},
{
"metadata": {},
@@ -12,8 +12,8 @@
"metadata": {
"collapsed": true,
"ExecuteTime": {
"end_time": "2026-01-06T01:50:04.573176600Z",
"start_time": "2026-01-06T01:41:33.836804400Z"
"end_time": "2026-05-12T06:14:49.072001900Z",
"start_time": "2026-05-12T06:08:51.739974700Z"
}
},
"source": [
@@ -22,13 +22,13 @@
"from tqdm import tqdm\n",
"\n",
"cookies = {\n",
" 'MD_accessToken': '6864ddf5-fa96-466f-b228-f2621516a2bf',\n",
" 'MD_accessToken': '2701b3d9-c959-4bfc-ad17-0a9b3f237f75',\n",
"}\n",
"\n",
"headers = {\n",
" 'Accept': 'application/json, text/plain, */*',\n",
" 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',\n",
" 'Authorization': 'Bearer6864ddf5-fa96-466f-b228-f2621516a2bf',\n",
" 'Authorization': 'Bearer2701b3d9-c959-4bfc-ad17-0a9b3f237f75',\n",
" 'Connection': 'keep-alive',\n",
" 'Content-Type': 'application/json;charset=UTF-8',\n",
" 'Origin': 'https://store.fuchuang.com',\n",
@@ -36,20 +36,18 @@
" 'Sec-Fetch-Dest': 'empty',\n",
" 'Sec-Fetch-Mode': 'cors',\n",
" 'Sec-Fetch-Site': 'same-origin',\n",
" 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0',\n",
" 'X-FC-TRACE-ID': '0924ec43dfae4ba48176700dee39833b',\n",
" 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0',\n",
" 'X-FC-TRACE-ID': '3b644c0201c34c6cbb4333f57367e40b',\n",
" 'loginPlatform': 'store_pc',\n",
" 'platform': 'store_pc',\n",
" 'searchInfo': '%E5%AE%A2%E6%88%B7%E8%BD%A6%E8%BE%86,%E5%AE%A2%E6%88%B7%E7%AE%A1%E7%90%86,%E6%9F%A5%E8%AF%A2',\n",
" 'sec-ch-ua': '\"Microsoft Edge\";v=\"143\", \"Chromium\";v=\"143\", \"Not A(Brand\";v=\"24\"',\n",
" 'sec-ch-ua': '\"Microsoft Edge\";v=\"147\", \"Not.A/Brand\";v=\"8\", \"Chromium\";v=\"147\"',\n",
" 'sec-ch-ua-mobile': '?0',\n",
" 'sec-ch-ua-platform': '\"Windows\"',\n",
" 'user-info-wms': '{\"token\":\"Bearer6864ddf5-fa96-466f-b228-f2621516a2bf\",\"platform\":\"store_pc\"}',\n",
" 'user-info-wms': '{\"token\":\"Bearer2701b3d9-c959-4bfc-ad17-0a9b3f237f75\",\"platform\":\"store_pc\"}',\n",
" 'x-fc-client': 'web',\n",
" # 'Cookie': 'MD_accessToken=6864ddf5-fa96-466f-b228-f2621516a2bf',\n",
" # 'Cookie': 'MD_accessToken=2701b3d9-c959-4bfc-ad17-0a9b3f237f75',\n",
"}\n",
"\n",
"\n",
"json_data = {\n",
" 'phone': '',\n",
" 'name': '',\n",
@@ -63,7 +61,7 @@
"}\n",
"\n",
"all_data = []\n",
"for i in tqdm(range(1, 758)):\n",
"for i in tqdm(range(1, 486)):\n",
" json_data['pageNum'] = i\n",
" response = requests.post(\n",
" 'https://store.fuchuang.com/api/store-crm/crm/customer/query',\n",
@@ -88,13 +86,13 @@
"text": [
"<>:63: SyntaxWarning: invalid escape sequence '\\I'\n",
"<>:63: SyntaxWarning: invalid escape sequence '\\I'\n",
"C:\\Users\\hp_z66\\AppData\\Local\\Temp\\ipykernel_31392\\364108658.py:63: SyntaxWarning: invalid escape sequence '\\I'\n",
"C:\\Users\\hp_z66\\AppData\\Local\\Temp\\ipykernel_14680\\526967017.py:63: SyntaxWarning: invalid escape sequence '\\I'\n",
" df.to_excel('D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\美孚客户信息.xlsx', index=False)\n",
"100%|██████████| 757/757 [08:25<00:00, 1.50it/s]\n"
"100%|██████████| 485/485 [05:54<00:00, 1.37it/s]\n"
]
}
],
"execution_count": 1
"execution_count": 13
},
{
"metadata": {},
@@ -105,8 +103,8 @@
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-01-06T06:59:53.687706100Z",
"start_time": "2026-01-06T05:40:36.873045Z"
"end_time": "2026-05-12T07:23:39.540370100Z",
"start_time": "2026-05-12T06:31:05.220043700Z"
}
},
"cell_type": "code",
@@ -116,34 +114,36 @@
"from tqdm.notebook import tqdm\n",
"import pandas as pd\n",
"cookies = {\n",
" 'MD_accessToken': '6864ddf5-fa96-466f-b228-f2621516a2bf',\n",
" 'acw_tc': '0a0572c017785673680518302e62de2d436dcebb15d1ca5dd604f3df26743b',\n",
" 'MD_accessToken': 'fc95ef0c-1929-4fa3-95b9-2fdfd56af0eb',\n",
"}\n",
"\n",
"headers = {\n",
" 'Accept': 'application/json, text/plain, */*',\n",
" 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',\n",
" 'Authorization': 'Bearer6864ddf5-fa96-466f-b228-f2621516a2bf',\n",
" 'Accept-Language': 'zh-CN,zh;q=0.9',\n",
" 'Authorization': 'Bearerfc95ef0c-1929-4fa3-95b9-2fdfd56af0eb',\n",
" 'Connection': 'keep-alive',\n",
" 'Content-Type': 'application/json;charset=UTF-8',\n",
" 'Origin': 'https://store.fuchuang.com',\n",
" 'Referer': 'https://store.fuchuang.com/store/',\n",
" 'Referer': 'https://store.fuchuang.com/store/index.html',\n",
" 'Sec-Fetch-Dest': 'empty',\n",
" 'Sec-Fetch-Mode': 'cors',\n",
" 'Sec-Fetch-Site': 'same-origin',\n",
" 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0',\n",
" 'X-FC-TRACE-ID': 'a26acd1fe3c5460e890e80c8ad88a6da',\n",
" 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0',\n",
" 'X-FC-TRACE-ID': '29cb0c9ab8904d85b54f1b1bb3ae33b5',\n",
" 'loginPlatform': 'store_pc',\n",
" 'platform': 'store_pc',\n",
" 'sec-ch-ua': '\"Microsoft Edge\";v=\"143\", \"Chromium\";v=\"143\", \"Not A(Brand\";v=\"24\"',\n",
" 'sec-ch-ua': '\"Microsoft Edge\";v=\"147\", \"Not.A/Brand\";v=\"8\", \"Chromium\";v=\"147\"',\n",
" 'sec-ch-ua-mobile': '?0',\n",
" 'sec-ch-ua-platform': '\"Windows\"',\n",
" 'user-info-wms': '{\"token\":\"Bearer6864ddf5-fa96-466f-b228-f2621516a2bf\",\"platform\":\"store_pc\"}',\n",
" 'user-info-wms': '{\"token\":\"Bearerfc95ef0c-1929-4fa3-95b9-2fdfd56af0eb\",\"platform\":\"store_pc\"}',\n",
" 'x-fc-client': 'web',\n",
" # 'Cookie': 'MD_accessToken=6864ddf5-fa96-466f-b228-f2621516a2bf',\n",
" # 'Cookie': 'acw_tc=0a0572c017785673680518302e62de2d436dcebb15d1ca5dd604f3df26743b; MD_accessToken=fc95ef0c-1929-4fa3-95b9-2fdfd56af0eb',\n",
"}\n",
"df1 = pd.read_excel('D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\美孚客户信息.xlsx', sheet_name =0)\n",
"\n",
"df1 = pd.read_excel(r'D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\美孚客户信息.xlsx', sheet_name =0)\n",
"detail_list = []\n",
"start_index = 2658\n",
"start_index = 0\n",
"for index, row in tqdm(df1.iterrows(), total=len(df1)):\n",
" params = {\n",
" 'id': row[\"id\"],\n",
@@ -158,6 +158,7 @@
" headers=headers,\n",
" json=json_data,\n",
" )\n",
"\n",
" detail_list.append(response.json()['data'])\n",
" except Exception as e:\n",
" print(e)\n",
@@ -173,25 +174,21 @@
"name": "stderr",
"output_type": "stream",
"text": [
"<>:31: SyntaxWarning: invalid escape sequence '\\I'\n",
"<>:55: SyntaxWarning: invalid escape sequence '\\I'\n",
"<>:31: SyntaxWarning: invalid escape sequence '\\I'\n",
"<>:55: SyntaxWarning: invalid escape sequence '\\I'\n",
"C:\\Users\\hp_z66\\AppData\\Local\\Temp\\ipykernel_31392\\1770658545.py:31: SyntaxWarning: invalid escape sequence '\\I'\n",
" df1 = pd.read_excel('D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\美孚客户信息.xlsx', sheet_name =0)\n",
"C:\\Users\\hp_z66\\AppData\\Local\\Temp\\ipykernel_31392\\1770658545.py:55: SyntaxWarning: invalid escape sequence '\\I'\n",
"<>:58: SyntaxWarning: invalid escape sequence '\\I'\n",
"<>:58: SyntaxWarning: invalid escape sequence '\\I'\n",
"C:\\Users\\hp_z66\\AppData\\Local\\Temp\\ipykernel_14680\\3627701310.py:58: SyntaxWarning: invalid escape sequence '\\I'\n",
" df2.to_excel('D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\美孚客户信息明细1.xlsx', index=False)\n"
]
},
{
"data": {
"text/plain": [
" 0%| | 0/7567 [00:00<?, ?it/s]"
" 0%| | 0/4847 [00:00<?, ?it/s]"
],
"application/vnd.jupyter.widget-view+json": {
"version_major": 2,
"version_minor": 0,
"model_id": "755b9172bf87470583e777ee60281e95"
"model_id": "02a2225e158a4c208c837d37c2a525c1"
}
},
"metadata": {},
@@ -204,38 +201,39 @@
"name": "stdout",
"output_type": "stream",
"text": [
"('Connection aborted.', ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None))\n",
"('Connection aborted.', ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None))\n",
"('Connection aborted.', ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None))\n",
"('Connection aborted.', ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None))\n",
"('Connection aborted.', ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None))\n",
"('Connection aborted.', ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None))\n",
"('Connection aborted.', ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None))\n",
"('Connection aborted.', ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None))\n"
]
}
],
"execution_count": 10
"execution_count": 20
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-01-06T05:35:20.575883300Z",
"start_time": "2026-01-06T05:35:18.435503400Z"
"end_time": "2026-05-12T06:31:03.033486600Z",
"start_time": "2026-05-12T06:31:02.977494Z"
}
},
"cell_type": "code",
"source": [
"df2 = pd.DataFrame(detail_list)\n",
"df2.to_excel('D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\美孚客户信息明细2.xlsx', index=False)"
],
"source": "print(response.json())",
"id": "71fe765d89e1fc8d",
"outputs": [
{
"name": "stderr",
"name": "stdout",
"output_type": "stream",
"text": [
"<>:2: SyntaxWarning: invalid escape sequence '\\I'\n",
"<>:2: SyntaxWarning: invalid escape sequence '\\I'\n",
"C:\\Users\\hp_z66\\AppData\\Local\\Temp\\ipykernel_31392\\2944444433.py:2: SyntaxWarning: invalid escape sequence '\\I'\n",
" df2.to_excel('D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\美孚客户信息明细2.xlsx', index=False)\n"
"{'code': 10000, 'message': '操作成功', 'data': {'labelConsumptionType': 2, 'labelActivityType': 1, 'labelEquityCard': 0, 'labelScCard': 0, 'labelTcCard': 0, 'fcCustomerLabels': [{'labelId': 2, 'labelType': 1, 'labelTypeName': '客户类型标签', 'labelValue': 2, 'labelName': '新客'}, {'labelId': 4, 'labelType': 2, 'labelTypeName': '客户活跃度标签', 'labelValue': 1, 'labelName': '活跃'}], 'storeCustomerLabels': [], 'storeCustomerLabelNames': [], 'id': '177849100876200134310619337', 'name': '长安', 'phoneNumber': '15566441231', 'gender': 1, 'birthday': None, 'customerType': 'person', 'customerSource': 'ZRJD', 'sourceChannel': '', 'driverLicenseNumber': '', 'driverLicenseType': 'C1', 'provinceId': None, 'cityId': None, 'countyDistrictId': None, 'provinceName': '', 'cityName': '', 'countyDistrictName': '', 'driverLicenseExpiryDate': None, 'driverLicensePhoto': '', 'address': '', 'customerRemark': '', 'isMember': 0, 'mallUser': 0, 'commonUserId': 4919522, 'updateTime': '2026-05-11 17:18:18', 'creditCycle': 30, 'creditLine': 0.0, 'vehicleResps': [{'id': '177849100876900134310619338', 'customerId': '177849100876200134310619337', 'carNum': '赣E116Q0', 'drivenDistance': 0, 'licensePlateFlag': '赣', 'licensePlateNumber': 'E116Q0', 'vehicleModel': '长安 长安汽车 CS75 2014款 2.0L 手动 2015年产', 'color': '', 'vin': '', 'vehicleType': 'B', 'engine': '', 'lastMaintenanceDate': '2026-05-11 17:18:33', 'nextMaintenanceDate': None, 'nextMaintainMileage': None, 'insuranceCompany': '', 'effectiveDate': None, 'expiryDate': None, 'description': None, 'remark': '', 'carPhoto': 'https://image.fuchuang.com/prod/f29f067f_%E9%95%BF%E5%AE%8920230901112941.png', 'brand': '长安', 'brandType': '', 'carName': '', 'saleName': '长安 CS75 2.0L 手动', 'paiLiang': '', 'avgPrice': 12.58, 'tireSize': '', 'annualInspectionDate': None, 'commonVehicleId': 3690941, 'storeMallVehicleId': None, 'fid': 0, 'fidCode': '', 'year': '2015', 'gearboxCode': '1', 'gearboxType': '手动', 'levelName': 'CS75', 'seriesId': 216, 'seriesName': 'CS75', 'updateTime': '2026-05-11 17:18:18', 'vid': 95750, 'modelYear': 2014, 'powerVersion': '', 'energyVersion': '', 'saleModel': '', 'displacementType': '2.0L', 'brandId': 207, 'vendorName': '长安汽车', 'vendorId': 204, 'carInfo': '2014款 2.0L 手动 2015年产', 'yearText': '2015年产', 'isVip': None, 'insuranceVehicleId': None, 'energyType': 1, 'energyTypeName': '汽油', 'status': 1}], 'storeMallUser': 0}, 'detail': None, 'trace': None, 'success': True}\n"
]
}
],
"execution_count": 7
"execution_count": 19
}
],
"metadata": {
@@ -10,120 +10,13 @@
},
{
"cell_type": "code",
"execution_count": 1,
"id": "479a84ce",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"🔍 正在扫描所有文件...\n",
"✅ 共找到 66 个实例,总计 90 个文件\n",
"📁 正在生成批次 1: C:\\Users\\hp_z66\\OneDrive\\Desktop\\新建文件夹\\FPO提交_20260207112107_resources_1\\输出_1\n",
"[Batch 1] ✅ FINST-0CC662718BILO83CEX5TJ4OXZP2C3X1PCLRWLFGL.png\n",
"[Batch 1] ✅ FINST-0D866I81JANY5WG8A2DT15S63HZH20YFR68FMQJA.png\n",
"[Batch 1] ✅ FINST-0HD66Z81DFXYBP816VRKD6S2HA2H3RYCBYKFMR6.jpg\n",
"[Batch 1] ✅ FINST-3MF66MB1C62UYQ70B6VFWCC72LWD3WFATRQ8MJF1.jpg\n",
"[Batch 1] ✅ FINST-3RB66I91KLXKFLFLFENM3DP0BQER2D0BEAXVLS11.xlsx\n",
"[Batch 1] ✅ FINST-3SC66EA1POUU8OOK7YW2GDJEKD972XTSC1V9MCB1.png\n",
"[Batch 1] ✅ FINST-42766EA129TVP57F6HGFPAATXT4K2J17LS7BMPS2.png\n",
"[Batch 1] ✅ FINST-54A66HC1426KP5L87MXEA682I67O23YKVXUUL9U9.jpg\n",
"[Batch 1] ✅ FINST-54A66HC1BDILGOIO8D24RCKSUXOU2641DLRWLFY5.png\n",
"[Batch 1] ✅ FINST-54A66HC1NBQSMDDUEDQU4CSW0OJI27EQ2TV6MHV.xlsx\n",
"[Batch 1] ✅ FINST-5B866X816C0WLA139FUCS6ISBUCK3KXV3UIBMX22.jpg\n",
"[Batch 1] ✅ FINST-5W966981KWJJ06WS8VXCYC10RV7U31E6282ULAHS.png\n",
"[Batch 1] ✅ FINST-5X866U8169BBPU9BFDL61ASKGDPW3RJM5LIILSNA.png\n",
"[Batch 1] ✅ FINST-65D66X71VHAPFNPZ9OFURCIREZAS28FI7P12MJS.png\n",
"[Batch 1] ✅ FINST-69E66NA11AKXLE2R7DOP3AOZM8SD3R64OXNDM7G.png\n",
"[Batch 1] ✅ FINST-69E66NA1ATDYE53ADVQ8DCX122G53OQC1ETEM62.png\n",
"[Batch 1] ✅ FINST-6B966W917QETCTT5ARDDR8J2IOJD26ZQYVT7M3I.png\n",
"[Batch 1] ✅ FINST-8AD662D1X8VOJJUGCZ7NFCI1XLDM3EUX97H1MKJ1.png\n",
"[Batch 1] ✅ FINST-8EC66FA15UNNQPWWBOPENDDJ6EQM2MDGX4SZLOP4.jpg\n",
"[Batch 1] ✅ FINST-8O866AA142HTFEQ18XDVG5SQ0Y7Z14EVF6Y7MBHB.jpg\n",
"[Batch 1] ✅ FINST-9FA66WC1LDJNFROD7HJUI4OJ6C2J22UP25SZLUQA.jpg\n",
"[Batch 1] ✅ FINST-AZC667816Z9TV9Z4DD1PDD4OLN5825J8S4O7MOJ1.png\n",
"[Batch 1] ✅ FINST-BL866S61XU8DOZG5BZ6E4DZ2UOIV3B6CEHALL3QI.jpg\n",
"[Batch 1] ✅ FINST-ETA66681ZAHDHL2OA0MQR6UB9W5N2MZM2DGLLU2.png\n",
"[Batch 1] ✅ FINST-FX7660A1N11VJB6IBDBRE8N012ZQ2HVJIWBAMYL2.jpg\n",
"[Batch 1] ✅ FINST-G7B66QC1U162UFRMHJFJ59Q5VZZD3VQ1MS4KM0F.png\n",
"[Batch 1] ✅ FINST-HI766JB1ORJFF6STEI8PR6E3YJTF2B87VNDOLSM5.xlsx\n",
"[Batch 1] ✅ FINST-HRD66W919462UFW0NG4PODHZZUW63074RZAKM1DK.png\n",
"[Batch 1] ✅ FINST-IO766F81JX9VU83Z6OR927WUWBUJ3FDQKEGAM0X.xlsx\n",
"[Batch 1] ✅ FINST-IQC66GC18W4YQ8GSCL23T582HU1H3960PVGEML8.png\n",
"[Batch 1] ✅ FINST-IRD66GC15CA2MFOFM8MHCBN7OSWA3PKSUZAKMKS.png\n",
"[Batch 1] ✅ FINST-IRD66PB1X8I2R8DLJKVF9667G4LC3TWHHZLKM0J.png\n",
"[Batch 1] ✅ FINST-IUF66391KP8W6U35CG7JL8UC2GK52JXZA6TBM6P.png\n",
"[Batch 1] ✅ FINST-J0A66981DAZDOPI7EF20N91K9UM72O8N526MLZO2.png\n",
"[Batch 1] ✅ FINST-J3D66LA13NTHEZAICABNRCD3KVCY222Q7IORL7UD.jpg\n",
"[Batch 1] ✅ FINST-JB966E91FW8YJMLMD52WCCZCXO5V28E0JHMEMM.jpg\n",
"[Batch 1] ✅ FINST-JXA66PB1ONATQBEIBDMEZ45MLMVB3M0CO6O7MH01.png\n",
"[Batch 1] ✅ FINST-JZE66UC1Q8H2F0E3M38EX853TR242SGJFJKKMK8.xlsx\n",
"[Batch 1] ✅ FINST-K7E66Z91F5NYOC0UD20BO775JN8C3D763K6FM16.xlsx\n",
"[Batch 1] ✅ FINST-KW866QB13VPZ5OSE9CE0LAWVKEO23QA4XVOGM92.jpg\n",
"[Batch 1] ✅ FINST-L3D66981YN31J5O8MGQCCCPF6FE82J0EBZMIMQ61.xlsx\n",
"[Batch 1] ✅ FINST-LCC66CA1BTTCK1HQ9S8TP91UHORX3JHYWOQKLO65.pptx\n",
"[Batch 1] ✅ FINST-LLA66D71DDUN56UUBRVZVD2EO3TS291ZDU00M734.png\n",
"[Batch 1] ✅ FINST-NLD66NA171BT4QDDCKR6HBD8XSHG3UJ1FSP7MJ39.png\n",
"[Batch 1] ✅ FINST-OPA665A1KV9TAY9UA78YID6X4S4Y2HPA03N7MO3.png\n",
"[Batch 1] ✅ FINST-P6D66F71YYMY4D4PE6FL58E9BU8X3JUP0G6FM6R.xlsx\n",
"[Batch 1] ✅ FINST-PF866EA1IKDECQEC8I8IECI2W3YI38JSXOPMLP8.jpg\n",
"[Batch 1] ✅ FINST-PJE66J91RJNZ1RSPBUYJB5ZF2PTI2TGY7PLGMAN.jpg\n",
"[Batch 1] ✅ FINST-PQ5669911JFP4W356K5HS98S8MZC2MUHMO82MX5.png\n",
"[Batch 1] ✅ FINST-PRF66GB105ZWQSK7CUNWR97ZV6LG3050I9UCMAY.png\n",
"[Batch 1] ✅ FINST-QJG66FC1JCE085Q3N439VAMLKVFF3GUQFMOHMEF2.xlsx\n",
"[Batch 1] ✅ FINST-QJG66IB1GWQZN4GVAGZCW8NQ61VB3AK3KSRGMWY1.xlsx\n",
"[Batch 1] ✅ FINST-QKC666919BQY70PZ8G3T57AX7UNA29H3N0BFMSC.xlsx\n",
"[Batch 1] ✅ FINST-QW8665B1XE41XSIJK01GJCNZ5YNQ2CRLVXNIMZW.png\n",
"[Batch 1] ✅ FINST-RAC66GD197JYBI9Q9WU4B731F3O52QOQQ42FMFR5.jpg\n",
"[Batch 1] ✅ FINST-UAD66591M1KJAXF6CROAFDK9Y4PD3IFY2QZTLUR1.jpg\n",
"[Batch 1] ✅ FINST-UH9665D1TLYDLO5TDNPV0CEJTFGX2AMSWP4MLGP.png\n",
"[Batch 1] ✅ FINST-USC66V6144XYJV79FR19G4JRKPA52X6OX8LFMWU3.xlsx\n",
"[Batch 1] ✅ FINST-UZA66QC18I9WZM23F0GIC4UMA25B2C14SHUBM742.png\n",
"[Batch 1] ✅ FINST-WM6666B10OZIDIA9C6K6R8A6NXEU3UON1HETL2ZJ.jpg\n",
"[Batch 1] ✅ FINST-WSF66J812FUXCO5ZCWI70C2TW7TG2OMS0F2EMAP1.png\n",
"[Batch 1] ✅ FINST-WSF66J818UYXDCKS8IZ7K50QAGNH2K3MJG8EMJP1.xlsx\n",
"[Batch 1] ✅ FINST-WYG66T718EQ0Z4TMNO8P2CRTS6NE3EUF016IMSDA.pptx\n",
"[Batch 1] ✅ FINST-Z6966NB14IDEWL268Y71A8FOS0HD2ROSG3QMLGZ3.mp4\n",
"[Batch 1] ✅ FINST-ZH866O918DRFX8WWEBEDSBMRTNU93TRYXNNOLVY.jpg\n",
"[Batch 1] ✅ FINST-ZKD66Q71XPBRGBVI8Z5FGCIWR2KS2NCI9TZ4MQ5L.xlsx\n",
"📁 正在生成批次 2: C:\\Users\\hp_z66\\OneDrive\\Desktop\\新建文件夹\\FPO提交_20260207112107_resources_1\\输出_2\n",
"[Batch 2] ✅ FINST-0D866I81JANY5WG8A2DT15S63HZH20YFR68FMQJA.png\n",
"[Batch 2] ✅ FINST-0HD66Z81DFXYBP816VRKD6S2HA2H3RYCBYKFMR6.jpg\n",
"[Batch 2] ✅ FINST-54A66HC1426KP5L87MXEA682I67O23YKVXUUL9U9.jpg\n",
"[Batch 2] ✅ FINST-65D66X71VHAPFNPZ9OFURCIREZAS28FI7P12MJS.jpg\n",
"[Batch 2] ✅ FINST-9FA66WC1LDJNFROD7HJUI4OJ6C2J22UP25SZLUQA.jpg\n",
"[Batch 2] ✅ FINST-BL866S61XU8DOZG5BZ6E4DZ2UOIV3B6CEHALL3QI.png\n",
"[Batch 2] ✅ FINST-ETA66681ZAHDHL2OA0MQR6UB9W5N2MZM2DGLLU2.xlsx\n",
"[Batch 2] ✅ FINST-HRD66W919462UFW0NG4PODHZZUW63074RZAKM1DK.png\n",
"[Batch 2] ✅ FINST-IQC66GC18W4YQ8GSCL23T582HU1H3960PVGEML8.png\n",
"[Batch 2] ✅ FINST-J0A66981DAZDOPI7EF20N91K9UM72O8N526MLZO2.png\n",
"[Batch 2] ✅ FINST-J3D66LA13NTHEZAICABNRCD3KVCY222Q7IORL7UD.xlsx\n",
"[Batch 2] ✅ FINST-K7E66Z91F5NYOC0UD20BO775JN8C3D763K6FM16.xlsx\n",
"[Batch 2] ✅ FINST-KW866QB13VPZ5OSE9CE0LAWVKEO23QA4XVOGM92.jpg\n",
"[Batch 2] ✅ FINST-LLA66D71DDUN56UUBRVZVD2EO3TS291ZDU00M734.png\n",
"[Batch 2] ✅ FINST-NLD66NA171BT4QDDCKR6HBD8XSHG3UJ1FSP7MJ39.png\n",
"[Batch 2] ✅ FINST-PF866EA1IKDECQEC8I8IECI2W3YI38JSXOPMLP8.jpg\n",
"📁 正在生成批次 3: C:\\Users\\hp_z66\\OneDrive\\Desktop\\新建文件夹\\FPO提交_20260207112107_resources_1\\输出_3\n",
"[Batch 3] ✅ FINST-65D66X71VHAPFNPZ9OFURCIREZAS28FI7P12MJS.png\n",
"[Batch 3] ✅ FINST-J0A66981DAZDOPI7EF20N91K9UM72O8N526MLZO2.png\n",
"📁 正在生成批次 4: C:\\Users\\hp_z66\\OneDrive\\Desktop\\新建文件夹\\FPO提交_20260207112107_resources_1\\输出_4\n",
"[Batch 4] ✅ FINST-J0A66981DAZDOPI7EF20N91K9UM72O8N526MLZO2.png\n",
"📁 正在生成批次 5: C:\\Users\\hp_z66\\OneDrive\\Desktop\\新建文件夹\\FPO提交_20260207112107_resources_1\\输出_5\n",
"[Batch 5] ✅ FINST-J0A66981DAZDOPI7EF20N91K9UM72O8N526MLZO2.png\n",
"📁 正在生成批次 6: C:\\Users\\hp_z66\\OneDrive\\Desktop\\新建文件夹\\FPO提交_20260207112107_resources_1\\输出_6\n",
"[Batch 6] ✅ FINST-J0A66981DAZDOPI7EF20N91K9UM72O8N526MLZO2.png\n",
"📁 正在生成批次 7: C:\\Users\\hp_z66\\OneDrive\\Desktop\\新建文件夹\\FPO提交_20260207112107_resources_1\\输出_7\n",
"[Batch 7] ✅ FINST-J0A66981DAZDOPI7EF20N91K9UM72O8N526MLZO2.png\n",
"📁 正在生成批次 8: C:\\Users\\hp_z66\\OneDrive\\Desktop\\新建文件夹\\FPO提交_20260207112107_resources_1\\输出_8\n",
"[Batch 8] ✅ FINST-J0A66981DAZDOPI7EF20N91K9UM72O8N526MLZO2.png\n",
"📁 正在生成批次 9: C:\\Users\\hp_z66\\OneDrive\\Desktop\\新建文件夹\\FPO提交_20260207112107_resources_1\\输出_9\n",
"[Batch 9] ✅ FINST-J0A66981DAZDOPI7EF20N91K9UM72O8N526MLZO2.png\n",
"\n",
"🎉 处理完成!共生成 9 个批次文件夹。\n"
]
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-18T03:34:19.039797100Z",
"start_time": "2026-04-18T03:34:18.737330Z"
}
],
},
"source": [
"import os\n",
"import shutil\n",
@@ -131,7 +24,7 @@
"import hashlib\n",
"\n",
"# 配置\n",
"root_path = r\"C:\\Users\\hp_z66\\OneDrive\\Desktop\\新建文件夹\\FPO提交_20260207112107_resources_1\"\n",
"root_path = r\"C:\\Users\\hp_z66\\Desktop\\2026-4-18智数\\FPO提交_20260418093857_resources_1\"\n",
"\n",
"# 存储:{finst_id: [file_path1, file_path2, ...]}\n",
"instance_files = {}\n",
@@ -207,7 +100,122 @@
" print(f\"[Batch {batch_index}] ❌ 复制失败: {e}\")\n",
"\n",
"print(f\"\\n🎉 处理完成!共生成 {max_rounds} 个批次文件夹。\")"
],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"🔍 正在扫描所有文件...\n",
"✅ 共找到 68 个实例,总计 93 个文件\n",
"📁 正在生成批次 1: C:\\Users\\hp_z66\\Desktop\\2026-4-18智数\\FPO提交_20260418093857_resources_1\\输出_1\n",
"[Batch 1] ✅ FINST-0CC662718BILO83CEX5TJ4OXZP2C3X1PCLRWLFGL.png\n",
"[Batch 1] ✅ FINST-0D866I81JANY5WG8A2DT15S63HZH20YFR68FMQJA.png\n",
"[Batch 1] ✅ FINST-0HD66Z81DFXYBP816VRKD6S2HA2H3RYCBYKFMR6.jpg\n",
"[Batch 1] ✅ FINST-3MF66MB1C62UYQ70B6VFWCC72LWD3WFATRQ8MJF1.jpg\n",
"[Batch 1] ✅ FINST-3RB66I91KLXKFLFLFENM3DP0BQER2D0BEAXVLS11.xlsx\n",
"[Batch 1] ✅ FINST-3SC66EA1POUU8OOK7YW2GDJEKD972XTSC1V9MCB1.png\n",
"[Batch 1] ✅ FINST-42766EA129TVP57F6HGFPAATXT4K2J17LS7BMPS2.png\n",
"[Batch 1] ✅ FINST-54A66HC1426KP5L87MXEA682I67O23YKVXUUL9U9.jpg\n",
"[Batch 1] ✅ FINST-54A66HC1BDILGOIO8D24RCKSUXOU2641DLRWLFY5.png\n",
"[Batch 1] ✅ FINST-54A66HC1NBQSMDDUEDQU4CSW0OJI27EQ2TV6MHV.xlsx\n",
"[Batch 1] ✅ FINST-5B866X816C0WLA139FUCS6ISBUCK3KXV3UIBMX22.jpg\n",
"[Batch 1] ✅ FINST-5W966981KWJJ06WS8VXCYC10RV7U31E6282ULAHS.png\n",
"[Batch 1] ✅ FINST-5X866U8169BBPU9BFDL61ASKGDPW3RJM5LIILSNA.png\n",
"[Batch 1] ✅ FINST-65D66X71VHAPFNPZ9OFURCIREZAS28FI7P12MJS.png\n",
"[Batch 1] ✅ FINST-69E66NA11AKXLE2R7DOP3AOZM8SD3R64OXNDM7G.png\n",
"[Batch 1] ✅ FINST-69E66NA1ATDYE53ADVQ8DCX122G53OQC1ETEM62.png\n",
"[Batch 1] ✅ FINST-6B966W917QETCTT5ARDDR8J2IOJD26ZQYVT7M3I.png\n",
"[Batch 1] ✅ FINST-8AD662D1X8VOJJUGCZ7NFCI1XLDM3EUX97H1MKJ1.png\n",
"[Batch 1] ✅ FINST-8EC66FA15UNNQPWWBOPENDDJ6EQM2MDGX4SZLOP4.jpg\n",
"[Batch 1] ✅ FINST-8O866AA142HTFEQ18XDVG5SQ0Y7Z14EVF6Y7MBHB.jpg\n",
"[Batch 1] ✅ FINST-9FA66WC1LDJNFROD7HJUI4OJ6C2J22UP25SZLUQA.jpg\n",
"[Batch 1] ✅ FINST-AZC667816Z9TV9Z4DD1PDD4OLN5825J8S4O7MOJ1.png\n",
"[Batch 1] ✅ FINST-BL866S61XU8DOZG5BZ6E4DZ2UOIV3B6CEHALL3QI.jpg\n",
"[Batch 1] ✅ FINST-BOC66X814P44ZFRANA18R9SUKA8Y2FVPZSYMM8BN.xlsx\n",
"[Batch 1] ✅ FINST-ETA66681ZAHDHL2OA0MQR6UB9W5N2MZM2DGLLU2.png\n",
"[Batch 1] ✅ FINST-F1A66381S5V32I1PLLIAICDBX2EW3SS3NUIMMJX4.png\n",
"[Batch 1] ✅ FINST-FX7660A1N11VJB6IBDBRE8N012ZQ2HVJIWBAMYL2.jpg\n",
"[Batch 1] ✅ FINST-G7B66QC1U162UFRMHJFJ59Q5VZZD3VQ1MS4KM0F.png\n",
"[Batch 1] ✅ FINST-HI766JB1ORJFF6STEI8PR6E3YJTF2B87VNDOLSM5.xlsx\n",
"[Batch 1] ✅ FINST-HRD66W919462UFW0NG4PODHZZUW63074RZAKM1DK.png\n",
"[Batch 1] ✅ FINST-IO766F81JX9VU83Z6OR927WUWBUJ3FDQKEGAM0X.xlsx\n",
"[Batch 1] ✅ FINST-IQC66GC18W4YQ8GSCL23T582HU1H3960PVGEML8.png\n",
"[Batch 1] ✅ FINST-IRD66GC15CA2MFOFM8MHCBN7OSWA3PKSUZAKMKS.png\n",
"[Batch 1] ✅ FINST-IRD66PB1X8I2R8DLJKVF9667G4LC3TWHHZLKM0J.png\n",
"[Batch 1] ✅ FINST-IUF66391KP8W6U35CG7JL8UC2GK52JXZA6TBM6P.png\n",
"[Batch 1] ✅ FINST-J0A66981DAZDOPI7EF20N91K9UM72O8N526MLZO2.png\n",
"[Batch 1] ✅ FINST-J3D66LA13NTHEZAICABNRCD3KVCY222Q7IORL7UD.jpg\n",
"[Batch 1] ✅ FINST-JB966E91FW8YJMLMD52WCCZCXO5V28E0JHMEMM.jpg\n",
"[Batch 1] ✅ FINST-JXA66PB1ONATQBEIBDMEZ45MLMVB3M0CO6O7MH01.png\n",
"[Batch 1] ✅ FINST-JZE66UC1Q8H2F0E3M38EX853TR242SGJFJKKMK8.xlsx\n",
"[Batch 1] ✅ FINST-K7E66Z91F5NYOC0UD20BO775JN8C3D763K6FM16.xlsx\n",
"[Batch 1] ✅ FINST-KW866QB13VPZ5OSE9CE0LAWVKEO23QA4XVOGM92.jpg\n",
"[Batch 1] ✅ FINST-L3D66981YN31J5O8MGQCCCPF6FE82J0EBZMIMQ61.xlsx\n",
"[Batch 1] ✅ FINST-LCC66CA1BTTCK1HQ9S8TP91UHORX3JHYWOQKLO65.pptx\n",
"[Batch 1] ✅ FINST-LLA66D71DDUN56UUBRVZVD2EO3TS291ZDU00M734.png\n",
"[Batch 1] ✅ FINST-NLD66NA171BT4QDDCKR6HBD8XSHG3UJ1FSP7MJ39.png\n",
"[Batch 1] ✅ FINST-OPA665A1KV9TAY9UA78YID6X4S4Y2HPA03N7MO3.png\n",
"[Batch 1] ✅ FINST-P6D66F71YYMY4D4PE6FL58E9BU8X3JUP0G6FM6R.xlsx\n",
"[Batch 1] ✅ FINST-PF866EA1IKDECQEC8I8IECI2W3YI38JSXOPMLP8.jpg\n",
"[Batch 1] ✅ FINST-PJE66J91RJNZ1RSPBUYJB5ZF2PTI2TGY7PLGMAN.jpg\n",
"[Batch 1] ✅ FINST-PQ5669911JFP4W356K5HS98S8MZC2MUHMO82MX5.png\n",
"[Batch 1] ✅ FINST-PRF66GB105ZWQSK7CUNWR97ZV6LG3050I9UCMAY.png\n",
"[Batch 1] ✅ FINST-QJG66FC1JCE085Q3N439VAMLKVFF3GUQFMOHMEF2.xlsx\n",
"[Batch 1] ✅ FINST-QJG66IB1GWQZN4GVAGZCW8NQ61VB3AK3KSRGMWY1.xlsx\n",
"[Batch 1] ✅ FINST-QKC666919BQY70PZ8G3T57AX7UNA29H3N0BFMSC.xlsx\n",
"[Batch 1] ✅ FINST-QW8665B1XE41XSIJK01GJCNZ5YNQ2CRLVXNIMZW.png\n",
"[Batch 1] ✅ FINST-RAC66GD197JYBI9Q9WU4B731F3O52QOQQ42FMFR5.jpg\n",
"[Batch 1] ✅ FINST-UAD66591M1KJAXF6CROAFDK9Y4PD3IFY2QZTLUR1.jpg\n",
"[Batch 1] ✅ FINST-UH9665D1TLYDLO5TDNPV0CEJTFGX2AMSWP4MLGP.png\n",
"[Batch 1] ✅ FINST-USC66V6144XYJV79FR19G4JRKPA52X6OX8LFMWU3.xlsx\n",
"[Batch 1] ✅ FINST-UZA66QC18I9WZM23F0GIC4UMA25B2C14SHUBM742.png\n",
"[Batch 1] ✅ FINST-WM6666B10OZIDIA9C6K6R8A6NXEU3UON1HETL2ZJ.jpg\n",
"[Batch 1] ✅ FINST-WSF66J812FUXCO5ZCWI70C2TW7TG2OMS0F2EMAP1.png\n",
"[Batch 1] ✅ FINST-WSF66J818UYXDCKS8IZ7K50QAGNH2K3MJG8EMJP1.xlsx\n",
"[Batch 1] ✅ FINST-WYG66T718EQ0Z4TMNO8P2CRTS6NE3EUF016IMSDA.pptx\n",
"[Batch 1] ✅ FINST-Z6966NB14IDEWL268Y71A8FOS0HD2ROSG3QMLGZ3.mp4\n",
"[Batch 1] ✅ FINST-ZH866O918DRFX8WWEBEDSBMRTNU93TRYXNNOLVY.jpg\n",
"[Batch 1] ✅ FINST-ZKD66Q71XPBRGBVI8Z5FGCIWR2KS2NCI9TZ4MQ5L.xlsx\n",
"📁 正在生成批次 2: C:\\Users\\hp_z66\\Desktop\\2026-4-18智数\\FPO提交_20260418093857_resources_1\\输出_2\n",
"[Batch 2] ✅ FINST-0D866I81JANY5WG8A2DT15S63HZH20YFR68FMQJA.png\n",
"[Batch 2] ✅ FINST-0HD66Z81DFXYBP816VRKD6S2HA2H3RYCBYKFMR6.jpg\n",
"[Batch 2] ✅ FINST-54A66HC1426KP5L87MXEA682I67O23YKVXUUL9U9.jpg\n",
"[Batch 2] ✅ FINST-65D66X71VHAPFNPZ9OFURCIREZAS28FI7P12MJS.jpg\n",
"[Batch 2] ✅ FINST-9FA66WC1LDJNFROD7HJUI4OJ6C2J22UP25SZLUQA.jpg\n",
"[Batch 2] ✅ FINST-BL866S61XU8DOZG5BZ6E4DZ2UOIV3B6CEHALL3QI.png\n",
"[Batch 2] ✅ FINST-ETA66681ZAHDHL2OA0MQR6UB9W5N2MZM2DGLLU2.xlsx\n",
"[Batch 2] ✅ FINST-F1A66381S5V32I1PLLIAICDBX2EW3SS3NUIMMJX4.png\n",
"[Batch 2] ✅ FINST-HRD66W919462UFW0NG4PODHZZUW63074RZAKM1DK.png\n",
"[Batch 2] ✅ FINST-IQC66GC18W4YQ8GSCL23T582HU1H3960PVGEML8.png\n",
"[Batch 2] ✅ FINST-J0A66981DAZDOPI7EF20N91K9UM72O8N526MLZO2.png\n",
"[Batch 2] ✅ FINST-J3D66LA13NTHEZAICABNRCD3KVCY222Q7IORL7UD.xlsx\n",
"[Batch 2] ✅ FINST-K7E66Z91F5NYOC0UD20BO775JN8C3D763K6FM16.xlsx\n",
"[Batch 2] ✅ FINST-KW866QB13VPZ5OSE9CE0LAWVKEO23QA4XVOGM92.jpg\n",
"[Batch 2] ✅ FINST-LLA66D71DDUN56UUBRVZVD2EO3TS291ZDU00M734.png\n",
"[Batch 2] ✅ FINST-NLD66NA171BT4QDDCKR6HBD8XSHG3UJ1FSP7MJ39.png\n",
"[Batch 2] ✅ FINST-PF866EA1IKDECQEC8I8IECI2W3YI38JSXOPMLP8.jpg\n",
"📁 正在生成批次 3: C:\\Users\\hp_z66\\Desktop\\2026-4-18智数\\FPO提交_20260418093857_resources_1\\输出_3\n",
"[Batch 3] ✅ FINST-65D66X71VHAPFNPZ9OFURCIREZAS28FI7P12MJS.png\n",
"[Batch 3] ✅ FINST-J0A66981DAZDOPI7EF20N91K9UM72O8N526MLZO2.png\n",
"📁 正在生成批次 4: C:\\Users\\hp_z66\\Desktop\\2026-4-18智数\\FPO提交_20260418093857_resources_1\\输出_4\n",
"[Batch 4] ✅ FINST-J0A66981DAZDOPI7EF20N91K9UM72O8N526MLZO2.png\n",
"📁 正在生成批次 5: C:\\Users\\hp_z66\\Desktop\\2026-4-18智数\\FPO提交_20260418093857_resources_1\\输出_5\n",
"[Batch 5] ✅ FINST-J0A66981DAZDOPI7EF20N91K9UM72O8N526MLZO2.png\n",
"📁 正在生成批次 6: C:\\Users\\hp_z66\\Desktop\\2026-4-18智数\\FPO提交_20260418093857_resources_1\\输出_6\n",
"[Batch 6] ✅ FINST-J0A66981DAZDOPI7EF20N91K9UM72O8N526MLZO2.png\n",
"📁 正在生成批次 7: C:\\Users\\hp_z66\\Desktop\\2026-4-18智数\\FPO提交_20260418093857_resources_1\\输出_7\n",
"[Batch 7] ✅ FINST-J0A66981DAZDOPI7EF20N91K9UM72O8N526MLZO2.png\n",
"📁 正在生成批次 8: C:\\Users\\hp_z66\\Desktop\\2026-4-18智数\\FPO提交_20260418093857_resources_1\\输出_8\n",
"[Batch 8] ✅ FINST-J0A66981DAZDOPI7EF20N91K9UM72O8N526MLZO2.png\n",
"📁 正在生成批次 9: C:\\Users\\hp_z66\\Desktop\\2026-4-18智数\\FPO提交_20260418093857_resources_1\\输出_9\n",
"[Batch 9] ✅ FINST-J0A66981DAZDOPI7EF20N91K9UM72O8N526MLZO2.png\n",
"\n",
"🎉 处理完成!共生成 9 个批次文件夹。\n"
]
}
],
"execution_count": 2
},
{
"cell_type": "markdown",
@@ -219,34 +227,13 @@
},
{
"cell_type": "code",
"execution_count": 4,
"id": "90309f69",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"🔍 正在扫描所有文件...\n",
"✅ 共找到 9 个文件,分属:附件、图片、其他\n",
"\n",
"📦 处理类别: 附件 (共 1 批)\n",
"[附件 Batch 1] ✅ FINST-56B66Q91XU6TMONCFZBLBCVK9MS03SSG3SI7MR1.pdf\n",
"[附件 Batch 1] ✅ FINST-C98664A1A8XJTVAW9W0256C4AF5S2JIWPBIULNM3.pdf\n",
"[附件 Batch 1] ✅ FINST-JZ766R91YWUW0FZ6CXRXSBAVXQ0J2ZOZEEOCMGA.pdf\n",
"[附件 Batch 1] ✅ FINST-R3D664B1B7ZYYR569QITJB9VCZXT2B8WIUNFM4X2.xlsx\n",
"[附件 Batch 1] ✅ FINST-RC966V713AMLLTHG8M1UBD6OK7EG3M3PWTYWLQYL.pdf\n",
"[附件 Batch 1] ✅ FINST-SUC66KA1UDIL18KXAMFCK9PW64XN375YHFQWLLC.pdf\n",
"[附件 Batch 1] ✅ FINST-TM966BD1Y9HK1YK1BFUOL9IO9TSI3WK4G6CVLS45.xlsx\n",
"[附件 Batch 1] ✅ FINST-ZKD66Q719O2TZRLY5HZJNAFGJW2F2IE4JYC7M0F.jpg\n",
"\n",
"📦 处理类别: 图片 (共 1 批)\n",
"[图片 Batch 1] ✅ FINST-SUC66KA1C5YJQ4NNAKAGHBOOPPFQ3QX7EJQULEKV1.jpg\n",
"\n",
"🎉 所有类别处理完成!\n"
]
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-18T07:04:36.512416200Z",
"start_time": "2026-04-18T07:04:36.466302Z"
}
],
},
"source": [
"import os\n",
"import shutil\n",
@@ -254,7 +241,7 @@
"import hashlib\n",
"\n",
"# 配置\n",
"root_path = r\"C:\\Users\\hp_z66\\OneDrive\\Desktop\\新建文件夹\\商机提交_20260209161647_resources_1\"\n",
"root_path = r\"C:\\Users\\hp_z66\\Desktop\\2026-4-18智数\\商机提交_20260418093735_resources_1\"\n",
"\n",
"# 分类存储:{\"附件\": {finst_id: [file1, file2, ...]}, \"图片\": {...}, \"其他\": {...}}\n",
"categorized_files = {\n",
@@ -361,9 +348,35 @@
" print(f\"[{category_name} Batch {batch_index}] ❌ 复制失败: {e}\")\n",
"\n",
"print(f\"\\n🎉 所有类别处理完成!\")"
],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"🔍 正在扫描所有文件...\n",
"✅ 共找到 9 个文件,分属:附件、图片、其他\n",
"\n",
"📦 处理类别: 附件 (共 1 批)\n",
"[附件 Batch 1] ✅ FINST-56B66Q91XU6TMONCFZBLBCVK9MS03SSG3SI7MR1.pdf\n",
"[附件 Batch 1] ✅ FINST-C98664A1A8XJTVAW9W0256C4AF5S2JIWPBIULNM3.pdf\n",
"[附件 Batch 1] ✅ FINST-JZ766R91YWUW0FZ6CXRXSBAVXQ0J2ZOZEEOCMGA.pdf\n",
"[附件 Batch 1] ✅ FINST-R3D664B1B7ZYYR569QITJB9VCZXT2B8WIUNFM4X2.xlsx\n",
"[附件 Batch 1] ✅ FINST-RC966V713AMLLTHG8M1UBD6OK7EG3M3PWTYWLQYL.pdf\n",
"[附件 Batch 1] ✅ FINST-SUC66KA1UDIL18KXAMFCK9PW64XN375YHFQWLLC.pdf\n",
"[附件 Batch 1] ✅ FINST-TM966BD1Y9HK1YK1BFUOL9IO9TSI3WK4G6CVLS45.xlsx\n",
"[附件 Batch 1] ✅ FINST-ZKD66Q719O2TZRLY5HZJNAFGJW2F2IE4JYC7M0F.jpg\n",
"\n",
"📦 处理类别: 图片 (共 1 批)\n",
"[图片 Batch 1] ✅ FINST-SUC66KA1C5YJQ4NNAKAGHBOOPPFQ3QX7EJQULEKV1.jpg\n",
"\n",
"🎉 所有类别处理完成!\n"
]
}
],
"execution_count": 6
}
],
"metadata": {
"kernelspec": {
"display_name": "F6+宜搭+其它",