1. 编写Python脚本,生成 xxx个联系人信息 .C++sv 文件
2. 进入 网页版-QQ邮箱-通讯录(管理-导入联系人文件),上传生成的 .csv 文件
3. QQ邮箱-通讯录(管理-导出联系人文件),格式选择:vCard格式
4. 传到 iOS/安卓 手机, 选择文件,导入通讯录
注意点:导出上限:每次1000左右; 导入上限:每次 3000左右
改良版本:
1. random_name_phone.py :生成随机联系人数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | #!usr/bin/env Python # -*- coding:utf-8 _*- """ @author:Zx @file: random_name_phone.py @time: 2025/9/5 17:45 # @describe: 生成 """ import json import random import csv # 中文姓氏列表 surnames = [ '赵' , '钱' , '孙' , '李' , '周' , '吴' , '郑' , '王' , '冯' , '陈' , '褚' , '卫' , '蒋' , '沈' , '韩' , '杨' , '朱' , '秦' , '尤' , '许' , '何' , '吕' , '施' , '张' , '孔' , '曹' , '严' , '华' , '金' , '魏' , '陶' , '姜' , '戚' , '谢' , '邹' , '喻' , '柏' , '水' , '窦' , '章' , '云' , '苏' , '潘' , '葛' , '奚' , '范' , '彭' , '郎' , '鲁' , '韦' , '昌' , '马' , '苗' , '凤' , '花' , '方' , '俞' , '任' , '袁' , '柳' , '酆' , '鲍' , '史' , '唐' , '费' , '廉' , '岑' , '薛' , '雷' , '贺' , '倪' , '汤' , '滕' , '殷' , '罗' , '毕' , '郝' , '邬' , '安' , '常' , '乐' , '于' , '时' , '傅' , '皮' , '卞' , '齐' , '康' , '伍' , '余' , '元' , '卜' , '顾' , '孟' , '平' , '黄' ] # 中文名字字符列表(男性和女性常用字) name_chars = [ '伟' , '芳' , '娜' , '秀' , '英' , '敏' , '静' , '建' , '强' , '军' , '杰' , '磊' , '洋' , '艳' , '玲' , '丽' , '刚' , '勇' , '鹏' , '超' , '明' , '霞' , '燕' , '华' , '平' , '鑫' , '晶' , '亮' , '健' , '凯' , '飞' , '波' , '宁' , '栋' , '博' , '宇' , '森' , '琳' , '丹' , '莹' , '雪' , '慧' , '璐' , '婷' , '欣' , '颖' , '悦' , '翔' , '海' , '峰' , '阳' , '帅' , '帅' , '琦' , '瑞' , '凡' , '思' , '宏' , '云' , '睿' , '哲' , '泽' , '嘉' , '子' , '浩' , '轩' , '宇' , '涵' , '一' , '逸' , '文' , '辰' , '沐' , '梓' , '艺' , '欣' , '梦' , '雨' , '彤' , '馨' ] def generate_random_name(): """生成随机中文姓名""" surname = random.choice(surnames) # 随机生成1或2个字的名字 if random.random() > 0.5 : name = ''.join(random.sample(name_chars, 1 )) else : name = ''.join(random.sample(name_chars, 2 )) return surname + name def generate_random_phone(): """生成随机中国手机号""" # 手机号前缀:常见的前三位 prefixes = [ '130' , '131' , '132' , '133' , '134' , '135' , '136' , '137' , '138' , '139' , '150' , '151' , '152' , '153' , '155' , '156' , '157' , '158' , '159' , '180' , '181' , '182' , '183' , '184' , '185' , '186' , '187' , '188' , '189' ] prefix = random.choice(prefixes) # 生成后8位数字 suffix = ''.join([ str (random.randint( 0 , 9 )) for _ in range ( 8 )]) return prefix + suffix def generate_contacts(num_contacts): """生成指定数量的联系人""" contacts = [] for i in range (num_contacts): name = generate_random_name() phone = generate_random_phone() contacts.append({ "Name" : name, "Phone" : phone}) return contacts def save_to_json(contacts, filename): """保存为JSON文件""" with open (filename, 'w' , encoding = 'utf-8' ) as f: json.dump(contacts, f, ensure_ascii = False , indent = 2 ) def save_to_csv(contacts, filename): """保存为CSV文件(可选)""" with open (filename, 'w' , newline = ' ', encoding=' utf - 8 - sig') as f: writer = csv.DictWriter(f, fieldnames = [ 'Name' , 'Phone' ]) writer.writeheader() writer.writerows(contacts) # 生成1000个联系人 contacts_list = generate_contacts( 1000 ) # 保存为JSON文件 save_to_json(contacts_list, 'random_contacts.json' ) print ( "已生成 random_contacts.json 文件" ) # 可选:同时保存为CSV文件(方便其他用途) save_to_csv(contacts_list, 'random_contacts.csv' ) print ( "已生成 random_contacts.csv 文件" ) # 打印前5个作为示例 print ( "\n前5个联系人的示例:" ) for i, contact in enumerate (contacts_list[: 5 ]): print (f "{contact['Name']}, {contact['Phone']}" ) |
2. csv_to_vcard.py: 将 .csv 通讯录文件, 转成 vCard格式 文件
#!usr/bin/env python# -*- coding:utf-8 _*-"""@author:Zx @file: csv_to_vcard.py @time: 2025/9/8 11:48 # @describe: 将 .csv 通讯录文件, 转成 vCard格式 文件"""import csvdef csv_to_vcard(csv_filename, vcf_filename): """ 将CSV文件转换为vCard格式 """ try: with open(csv_filename, mode='r', encoding='utf-8-sig') as csv_file: csv_reader = csv.DictReader(csv_file) # 检查列名 print(f"检测到的列名: {csv_reader.fieldnames}") with open(vcf_filename, mode='w', encoding='utf-8') as vcf_file: contact_count = 0 for row in csv_reader: try: name = row['Name'].strip() phone = row['Phone'].strip() # 生成vCard格式 vcard = [ 'BEGIN:VCARD', 'VERSION:3.0', f'N:{name}', f'FN:{name}', f'TEL;TYPE=CELL,VOICE:{phone}', 'END:VCARD' ] # 写入文件 vcf_file.write('\n'.join(vcard) + '\n\n') contact_count += 1 except KeyError as e: print(f"错误: 找不到列 {e}") return except Exception as e: print(f"处理行时出错: {e}") continue print(f"转换完成!成功转换 {contact_count} 个联系人到 {vcf_filename}") except FileNotFoundError: print(f"错误: 找不到文件 {csv_filename}") except Exception as e: print(f"发生错误: {e}")if __name__ == "__main__": csv_filename = 'random_contacts.csv' vcf_filename = 'contacts.vcf' csv_to_vcard(csv_filename, vcf_filename)