生命之风的低语
Whispers in the Wind of Life.

IOS、安卓机: 批量导入-通讯录信息-教程:

2026-02-28 13:35:50

1. 编写Python脚本,生成 xxx个联系人信息 .csv 文件

2. 进入 网页版-QQ邮箱-通讯录(管理-导入联系人文件),上传生成的 .csv 文件

3. QQ邮箱-通讯录(管理-导出联系人文件),格式选择:vCard格式

4. 传到 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)