编写 Python 脚本,生成 xxx 个联系人信息 .csv 文件
进入 网页版-QQ 邮箱 - 通讯录 (管理 - 导入联系人文件),上传生成的 .csv 文件
QQ 邮箱 - 通讯录 (管理 - 导出联系人文件),格式选择:vCard 格式
传到 IOS/安卓 手机, 选择文件,导入通讯录
注意点:导出上限:每次 1000 左右; 导入上限:每次 3000 左右
改良版本:
1. random_name_phone.py :生成随机联系人数据
#!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 csv
def 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)