20220721 python for循环学习

当前获取到wetchat单个聊天框的信息,组成一个列表,那么获取多个列表,如何分别命名比较变化呢?要分解步骤,首先逐个窗口爬取数据,然后分别列为多个列表数据,分别存储到对应联系人的存储文件中。将所有联系人存储到单独一个列表文件中,然后针对联系人信息做信息增量判断,如聊天记录有更新(比如切片列表最后三条信息逐条比对是否不同),则爬取增量信息并存储至对应联系人数据库中。本质上等同于python实现一个通讯录管理系统。肯定联系人信息是要字典存储信息。总结下,目前要解决的是两个功能:1)通讯录管理。2)增量数据爬取。也许可以利用装饰器试一下。
'''
通讯录文件中存有若干联系人的信息,
    每个联系人的信息由姓名和电话号码组成。
    编写程序,完成以下功能:
        输入姓名,若通讯录文件中存在,则讲该联系人信息输出;
        若不存在,则输出“Not found”。
'''
# execl文件方法实现,要求execl文件需要在跟py文件在同一个文件夹下
import openpyxl


name_in = input('输入要查找的联系人姓名:')
axj = openpyxl.load_workbook('电话簿.xlsx')
sheet = axj['Sheet1']
for i in range(2, 6):
    #获取多少行多少列
    name2 = sheet['A' + str(i)]
    telephone = sheet['B' + str(i)]
    if name_in == name2.value:
        print(name2.value, ':', telephone.value)
        break
    else:
        #判断是否循环完成
        if i == 5:
            print('Not found!')
View Code

1、

对于多个列表实现不同联系人聊天记录生成列表的问题,可以用类似的思路,使用列表嵌套,用不同的下标来标识列表中嵌套的列表元素。

list = []
>>> for i in range(5):
...     list.append([i])
...     
>>> list
[[0], [1], [2], [3], [4]]
>>> list[0]
[0]
>>> list[1]
[1]

简单的使用字典和列表实现学生信息管理系统(参考链接:https://blog.csdn.net/qq_42276781/article/details/125525012?spm=1001.2101.3001.6650.6&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-6-125525012-blog-89657431.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-6-125525012-blog-89657431.pc_relevant_default&utm_relevant_index=13))。可以模仿大佬的思路实现。

'''
文件的存放格式采用的是python自带的pickle模块,需要新建course.txt和student.txt供程序读写。
'''
import pickle
 
# 从文件中读取学生信息并返回
def readStudent():
    with open("student.txt",'rb') as f:
        try:
            return pickle.load(f)
        #读取失败,说明读取的文件为空,返回空列表即可
        except EOFError:
            return []
 
# 保存学生信息student_list到文件student.txt中
def saveStudent(student_list):
    with open("student.txt",'wb') as f:
        pickle.dump(student_list, f)
 
# 增加学生信息
def addStudent(student_list):
    id = input("请输入要增加的学生学号:")
    name = input("请输入要增加的学生姓名:")
    sex = input("请输入要增加的学生性别:")
    specialty = input("请输入要增加的学生专业班级:")
    # 把这4个数据装入字典student中
    student = {"学号":id, "姓名":name, "性别":sex, "专业班级":specialty}
    # 把字典student添加到列表student_list中
    student_list.append(student)
 
# 删除学生信息
def deleteStudent(student_list):
    id = input("请输入要删除的学生学号:")
    for i in range(0, len(student_list)):
        # student_list[i]是一个字典
        if student_list[i]["学号"] == id:
            # 删除student_list中的第i个字典
            student_list.pop(i)
            print("删除成功!")
            return # 结束函数
    print("删除失败,未查询到该学生。")
 
# 修改学生信息
def modifyStudent(student_list):
    id = input("请输入要修改的学生学号:")
    for i in range(0, len(student_list)):
        if student_list[i]["学号"] == id:
            id = input("请输入修改后的学生学号:")
            name = input("请输入修改后的姓名:")
            sex = input("请输入修改后的性别:")
            specialty = input("请输入修改后的专业班级:")
            # 把这4个数据装入字典student中
            student = {"学号":id, "姓名":name, "性别":sex, "专业班级":specialty}
            # 用student替换student_list中的第i个字典
            student_list[i] = student
            print("修改成功!")
            return # 结束函数
    print("修改失败,未查询到该学生。")
 
# 显示所有学生信息
def showStudent(student_list):
    print("学号\t\t姓名\t\t性别\t\t专业班级")
    for student in student_list:
        print("%s\t\t%s\t\t%s\t\t%s" %(student["学号"], student["姓名"], student["性别"], student["专业班级"]))
 
# 从文件中读取学生成绩信息
def readCourse():
    with open("course.txt",'rb') as f:
        try:
            return pickle.load(f)
        #读取失败,说明读取的文件为空,返回空列表即可
        except EOFError:
            return []
 
# 保存学生成绩信息course_list到文件course.txt中
def saveCourse(course_list):
    with open("course.txt",'wb') as f:
        pickle.dump(course_list, f)
 
# 增加学生成绩信息    
def addCourse(course_list):
    id = input("请输入要增加的学生学号:")
    english = int(input("请输入该学生的英语成绩:"))
    math = int(input("请输入该学生的数学成绩:"))
    computer = int(input("请输入该学生的计算机成绩:"))
    chemistry = int(input("请输入该学生的化学成绩:"))
    PE = int(input("请输入该学生的体育成绩:"))
    # 把这6个数据装入字典course中
    course = {"学号":id, "英语":english, "数学":math, "计算机":computer, "化学":chemistry, "体育":PE}
    # 把字典course添加到列表course_list中
    course_list.append(course)
 
# 删除学生成绩信息  
def deleteCourse(course_list):
    id = input("请输入要删除的学生学号:")
    for i in range(0, len(course_list)):
        # course_list[i]是一个字典
        if course_list[i]["学号"] == id:
            # 删除列表中的第i个字典
            course_list.pop(i)
            print("删除成功!")
            return #结束函数
    print("删除失败,未查询到该学生成绩。")
 
# 修改学生成绩信息
def modifyCourse(course_list):
    id = input("请输入要修改的学生学号:")
    for i in range(0, len(course_list)):
        if course_list[i]["学号"] == id:
            id = input("请输入修改后的学生学号:")
            english = int(input("请输入修改后的英语成绩:"))
            math = int(input("请输入修改后的数学成绩:"))
            computer = int(input("请输入修改后的计算机成绩:"))
            chemistry = int(input("请输入修改后的化学成绩:"))
            PE = int(input("请输入修改后的体育成绩:"))
            # 把这6个数据装入字典course中
            course = {"学号":id, "英语":english, "数学":math, "计算机":computer, "化学":chemistry, "体育":PE}
            # 用dict替换旧的数据
            course_list[i] = course
            print("修改成功!")
            return #结束函数
    print("修改失败,未查询到该学生成绩。")
 
# 显示学生成绩信息
def showCourse(course_list):
    print("学号\t\t英语\t\t数学\t\t计算机\t\t化学\t\t体育")
    for course in course_list:
        print("%s\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d" %(course["学号"], course["英语"], course["数学"],
                    course["计算机"], course["化学"], course["体育"]))
 
# 通过姓名查询该生的成绩信息
def searchScoreByName(student_list, course_list):
    name = input("请输入学生姓名:")
    id = "未查询到"
    for stu in student_list:
        if stu["姓名"] == name:
            id = stu["学号"]
            break
    if id == "未查询到":
        print("未查询到该学生信息。")
        return #结束函数
    for course in course_list:
        if course["学号"] == id:
            print("查询成功!该学生信息如下:")
            print("学号\t\t英语\t\t数学\t\t计算机\t\t化学\t\t体育")
            print("%s\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d" %(course["学号"], course["英语"], course["数学"],
                course["计算机"], course["化学"], course["体育"]))
            return #结束程序
    print("未查询到该学生成绩信息。")
 
# 查询某门课程得分最高的学生信息
def searchStudentByHighScore(student_list, course_list):
    courseName = input("请输入课程名称:")
    # 按这门课程冒泡排序
    for i in range(0, len(course_list)-1):
        for j in range(0, len(course_list)-1-i):
            if course_list[j][courseName] < course_list[j+1][courseName]:
                course_list[j], course_list[j+1] = course_list[j+1], course_list[j]
    id = course_list[0]["学号"]
    for student in student_list:
        if student["学号"] == id:
            print("查找成功!")
            print("学号\t\t姓名\t\t性别\t\t专业班级")
            print("%s\t\t%s\t\t%s\t\t%s" %(student["学号"], student["姓名"], student["性别"], student["专业班级"]))
            return
    print("未查找到该学生信息。")
 
# 输出某门课的平均成绩
def outputAverageScore(course_list):
    courseName = input("请输入课程名称:")
    sum = 0
    for course in course_list:
        sum += course[courseName]
    print("%s平均成绩为%.2f" %(courseName, sum/len(course_list)))
 
# 主菜单
def menu():
    print("1.增加学生信息    2.增加成绩信息")
    print("3.修改学生信息    4.修改成绩信息")
    print("5.删除学生信息    6.删除成绩信息")
    print("7.显示学生信息    8.显示成绩信息")
    print("9.通过姓名查询该生的成绩信息")
    print("10.查询某门课程得分最高的学生信息")
    print("11.输出某门课的平均成绩")
    print("0.保存并退出")
 
# 主函数
def main():
    student_list = readStudent()
    course_list = readCourse()
    flag = True
    while flag:
        menu()
        choose = input("请输入选项:")
        while True:
            # 增加学生信息
            if choose == '1':
                addStudent(student_list)
                break
            # 增加成绩信息
            elif choose == '2':
                addCourse(course_list)
                break
            # 修改学生信息
            elif choose == '3':
                modifyStudent(student_list)
                break
            # 修改成绩信息
            elif choose == '4':
                modifyCourse(course_list)
                break
            # 删除学生信息
            elif choose == '5':
                deleteStudent(student_list)
                break
            # 删除成绩信息
            elif choose == '6':
                deleteCourse(course_list)
                break
            # 显示学生信息
            elif choose == '7':
                showStudent(student_list)
                break
            # 显示成绩信息
            elif choose == '8':
                showCourse(course_list)
                break
            # 通过姓名查询该生的成绩信息
            elif choose == '9':
                searchScoreByName(student_list, course_list)
                break
            # 查询某门课程得分最高的学生信息
            elif choose == '10':
                searchStudentByHighScore(student_list, course_list)
                break
            # 输出某门课的平均成绩
            elif choose == '11':
                outputAverageScore(course_list)
                break
            # 保存数据并退出
            elif choose == '0':
                saveStudent(student_list)
                saveCourse(course_list)
                flag = False
                break
            else:
                choose = input("输入错误, 请重新输入:")
    
if __name__=='__main__':
    main()
View Code

 在查找中发现通讯录管理系统的思路,也涉及到id查重进行通讯录的增删改查操作(参考链接:https://www.cnblogs.com/pyexile/p/10958458.html)。代码记录如下

# --*-- coding:utf-8 --*--

import json
import time


class Contact(object):

    data = "hello"

    def __init__(self):
        with open("contact.txt", 'r', encoding='utf-8') as f:
            self.data = json.loads(f.read())  # 所有联系人列表
            # print(self.data, type(self.data))

    def main_menu(self):
        # 主菜单(主页面)
        while True:
            print('通讯录'.center(20, '='))
            menu = {'1': '快速查找',
                    '2': '添加联系人',
                    '3': '显示所有联系人'}
            for k, v in menu.items():
                print(k + ' ' + v)
            command = input('请选择你的操作>>')
            if command == '1':
                self.search()
            elif command == '2':
                self.add_contact()
            elif command == '3':
                self.show()
            elif command == 'q':
                print('退出...')
                break

    def search(self):
        print('快速查找'.center(20, '='))
        # 可以根据联系人名字查找,也可以根据电话号码查找
        find_info = input('请输入查找信息>>')
        count = 0
        for i in range(len(self.data)):
            if count > len(self.data):
                print('未找到该联系人')
                break
            if find_info in self.data[i]['name']:
                self.person_info(self.data[i])  # 若有该联系人,则进入联系人个人信息页
            elif find_info in self.data[i]['phone_number']:
                self.person_info(self.data[i])  # 若有该号码,则进入联系人个人信息页
            else:
                pass
            count += 1

    def person_info(self, info):
        # 个人信息页
        # find_info 是该联系人的信息字典
        print('已为你找到:{}'.format(info['name']))
        menu = {'1': '查看个人信息', '2': '修改信息', '3': '删除联系人', '4': '呼叫联系人', '5': '呼叫记录'}
        while True:
            print('个人信息页'.center(20, '='))
            for k, v in menu.items():
                print(k + ' ' + v)
            command = input('请选择操作>>')
            if command == '1':
                print('姓名:{}\n电话号码:{}\n通话记录:{}'.format(info['name'],
                                                       info['phone_number'], info['call_records']))
            elif command == '2':
                self.modify_info(info)
            elif command == '3':
                self.del_contact(info)
                break  # 删除联系人之后,该联系人的个人信息页就没了,所以就得跳回去
            elif command == '4':
                self.call(info)
            elif command == '5':
                self.call_logs(info)
            elif command == 'q':
                print('返回...')
                break

    def call_logs(self, info):
        # 通话记录
        print('呼叫记录'.center(20, '='))
        with open('contact.txt', 'r', encoding='utf-8') as f:
            data_list = json.loads(f.read())
        for data in data_list:
            if data['name'] == info['name']:
                print(data['call_records'])
                break
            else:
                continue

    def call(self, info):
        # 呼叫联系人
        print('呼叫{}'.format(info['name']).center(20, '='))
        print('通话中...')
        self.data.remove(info)
        start_time = time.time()
        now_time = time.ctime()
        input('按e挂断电话>>')
        end_time = time.time()
        pass_time = end_time - start_time
        info['call_records'].append(now_time+"通话时长:"+str(pass_time))  # 将本次通话加入通话记录的列表中
        self.data.append(info)
        self.update_contact()
        print('通话结束')

    def del_contact(self, info):
        # 删除联系人
        try:
            self.data.remove(info)
        except Exception as e:
            print(e)
        self.update_contact()
        print('成功删除联系人: {}'.format(info['name']))

    def modify_info(self, info):
        # 修改联系人信息
        # info是该联系人信息字典
        if info in self.data:
            self.data.remove(info)  # 将所有联系人的列表中的该联系人删除,等修改好之后再后在重新加进去,然后更新通讯录
        menu = {'1': '修改备注', '2': '修改号码', '3': '删除通话记录'}
        while True:
            print('修改信息'.center(20, '='))
            for k, v in menu.items():
                print(k + ' ' + v)
            command = input('请选择操作>>')
            if command == 'q':
                print('返回...')
                break
            if command == '1':
                info['name'] = input('请输入备注>>')
            elif command == '2':
                info['phone_number'] = input('请输入号码>>')
            elif command == '3':
                info['call_records'] = []
            else:
                continue
        self.data.append(info)  # 将修改过的该联系人信息加入所有联系人信息列表,以待更新通讯录
        # print(self.data)
        self.update_contact()  # 更新通讯录
        print('信息修改成功')

    def update_contact(self):
        # 刷新通讯录
        with open('contact.txt', 'w', encoding='utf-8') as f:
            try:
                json.dump(self.data, f, ensure_ascii=False)
            except Exception as e:
                print('操作失败:%s' % e)

    def add_contact(self):
        # 添加联系人
        # print(self.data)
        print('添加联系人'.center(20, '='))
        new_contact = dict()
        new_contact['name'] = input('请输入联系人备注>>')
        new_contact['phone_number'] = input('请输入号码>>')
        new_contact['call_records'] = []
        self.data.append(new_contact)
        self.update_contact()  # 更新通讯录
        print('成功添加联系人')

    def show(self):
        # 显示所有联系人
        print('所有联系人'.center(20, '='))
        contacts = {}  # 所有联系人的名字
        for i in range(len(self.data)):
            contacts[str(i)] = self.data[i]['name']
            print('{} {}'.format(str(i), self.data[i]['name']))
        command = input('请选择查看联系人>>')
        name = contacts[command]
        for data in self.data:
            if data['name'] == name:
                self.person_info(data)
            else:
                continue


if __name__ == '__main__':
    a1 = Contact()
    a1.main_menu()
View Code

 对于openpyxl库操作excel表格的用法,可以参考该文章:https://blog.csdn.net/qq_44614026/article/details/108083958。

可以借鉴的还有其他的通讯录管理功能实现思路,比如说知乎文章(参考链接:https://zhuanlan.zhihu.com/p/380942633):

'''
假设客户数据包括:姓名、性别、职务、电话、QQ、微信、公司。主要功能:1)通讯
录信息录入功能;2)通讯录信息修改、删除功能;3)通讯录信息浏览功能;4)通讯录信
息查询功能;5)按姓名排序功能;6)保存数据到文件
'''

data_dic = [
    {'姓名': 'Lisa', '性别': 'F', '职务': '程序媛', '电话': 19156193333,
     'QQ': 1123240666, '微信': 'abcde', '公司': '王氏公司'},
    {'姓名': 'Bob', '性别': 'M', '职务': '运维工程师', '电话': 19156195555,
     'QQ': 1123240555, '微信': 'bbcde', '公司': '海天公司'},
    {'姓名': 'Jack', '性别': 'M', '职务': '数据分析师', '电话': 19156197777,
     'QQ': 112324777, '微信': 'abc', '公司': '矿业集团'}
]
menu = """
                客户通讯录管理系统

     ===============功能菜单===============
    |
    |   1 通讯录信息录入功能
    |   2 通讯录信息修改功能
    |   3 通讯录信息删除功能
    |   4 通讯录信息浏览功能
    |   5 通讯录信息查询功能
    |   6 按姓名排序功能
    |   7 保存数据到文件
    |   0 退出管理系统
    |
    =======================================
    """


# 该函数用于在每一个功能中显示功能菜单
def print_menu():
    print(menu)


# 该函数用于显示在每一次操作后的信息:
def circle():
    for i in data_dic:
        print(i)


# 1.通讯录信息录入功能
def infor_insert():
    # print('请输入要录入的信息:(数据包括:姓名、性别、职务、电话、QQ、微信、公司):')
    # name = input('请输入姓名:')
    # sex = input('请输入性别:(F/M):')
    # profession = input('请输入职务:')
    # tel = input('请输入电话:')
    # qq = input('请输入QQ:')
    # wechat = input('请输入微信:')
    # company = input('请输入公司:')
    name, sex, profession, tel, qq, wechat, company = input(
        '请输入要录入的信息:(数据包括:姓名、性别、职务、电话、QQ、微信、公司)[注意:输入的内容用英文逗号分隔开!]\n').split(',')
    dic1 = {}
    dic1['姓名'] = name
    dic1['性别'] = sex
    dic1['职务'] = profession
    dic1['电话'] = tel
    dic1['QQ'] = qq
    dic1['微信'] = wechat
    dic1['公司'] = company
    data_dic.append(dic1)
    circle()


# 2.通讯录信息修改功能
def change_infor():
    name = input('请输入要修改人的姓名:')
    wechat = input('请输入要修改人的微信:')
    for i in data_dic:
        if name == i['姓名'] and wechat == i['微信']:
            # i['姓名'] = input('输入修改后的姓名:')
            # i['性别'] = input('输入修改后的性别:')
            # i['职务'] = input('输入修改后的职务:')
            # i['电话'] = input('输入修改后的电话:')
            # i['QQ'] = input('输入修改后的QQ:')
            # i['微信'] = input('输入修改后的微信:')
            # i['公司'] = input('输入修改后的公司:')
            i['姓名'], i['性别'], i['职务'], i['电话'], i['QQ'], i['微信'], i['公司'] = input(
                '请输入要录入的信息:(数据包括:姓名、性别、职务、电话、QQ、微信、公司)'
                '[注意:输入的内容用英文逗号分隔开!]').split(',')
            circle()
        else:
            continue


# 3.通讯录信息删除功能
def delete_infor():
    name = input('请输入要删除人的姓名:')
    wechat = input('请输入要删除人的微信:')
    for i in data_dic:
        if name == i['姓名'] and wechat == i['微信']:
            del i['姓名']
            del i['性别']
            del i['职务']
            del i['电话']
            del i['QQ']
            del i['微信']
            del i['公司']
            print('删除后的信息如下:')
            circle()

        else:
            continue


# 4.通讯录信息浏览功能
def watch_infor():
    circle()


# 5.通讯录信息查询功能
def query():
    name = input('请输入要查询的人的姓名:')
    wechat = input('请输入要查询的人的微信:')
    flag = False
    index = 0
    for i in range(len(data_dic)):
        if data_dic[i]['姓名'] == name and data_dic[i]['微信'] == wechat:
            flag = True
            index = i
            break
    if flag:
        print("学生查询到,学生信息为:")
        print(data_dic[index]['姓名'], data_dic[index]['性别'], data_dic[index]['职务'], data_dic[index]['电话'],
              data_dic[index]['QQ'], data_dic[index]['微信'], data_dic[index]['公司'])
    else:
        print("学生未找到!")


# 6.按姓名排序功能
def sort_name():
    list_name = []
    for i in data_dic:
        value_infor = i['姓名']
        value_infor.capitalize()
        list_name.append(value_infor)
    print('按姓名进行排序后的结果为:')
    list_name.sort()
    print(list_name)


# 7.保存数据到文件
def reserve_infor():
    file_name = input('请输入文件名(包括后缀名):')
    with open(file_name, 'w', encoding='utf-8') as fp:
        fp.write(str(data_dic))
    print('保存成功!')


# 0.退出管理系统
def exit_system():
    print('将退出管理系统!')
    exit()


def main():
    print_menu()
    while True:
        num = int(input('请输入要进行的操作的数字:'))
        if num == 1:
            infor_insert()
            continue
        elif num == 2:
            change_infor()
            continue
        elif num == 3:
            delete_infor()
            continue
        elif num == 4:
            watch_infor()
            continue
        elif num == 5:
            query()
            continue
        elif num == 6:
            sort_name()
            continue
        elif num == 7:
            reserve_infor()
            continue
        elif num == 0:
            exit_system()
        else:
            print('错误操作!\n系统将退出!\n')
            break


main()
View Code

 想了下,可以将字典格式转换为json格式的数据存取,具体可参考链接:https://blog.csdn.net/weixin_40493501/article/details/106406110。不过再次对比了,可能json格式文件不适合存储大数据?还是尝试用excel格式操作列表数据,可参考链接:https://blog.csdn.net/i_coffer/article/details/112134491。具体openpyxl的列表操作:

import openpyxl  # openpyxl引入模块
 
 
 
def write_to_excel(path: str, sheetStr, info, data):
 
    #     实例化一个workbook对象
    workbook = openpyxl.Workbook()
    # 激活一个sheet
    sheet = workbook.active
    # 为sheet设置一个title
    sheet.title = sheetStr
 
    # 添加表头(不需要表头可以不用加)
    data.insert(0, list(info))
    # 开始遍历数组
    for row_index, row_item in enumerate(data):
 
        for col_index, col_item in enumerate(row_item):
            # 写入
            sheet.cell(row=row_index+1,column= col_index+1,value=col_item)
 
    # 写入excel文件 如果path路径的文件不存在那么就会自动创建
    workbook.save(path)
    print('写入成功')
 
 
 
 
if __name__ == '__main__':
 
    # 数据结构1 path 文件的路径
    path = r'D:\Python\Project\demo1.xlsx'
    # 数据结构1Excel 中sheet 的名字
    sheetStr = '这是数据结构1'
 
    info = ['name', 'age', 'address']
    # 数据结构1数据
    writeData = [['John Brown', 18, 'New York No. 1 Lake Park']]
 
    # 执行
    write_to_excel(path, sheetStr, info, writeData)
View Code

dict字典操作可以参考:

import openpyxl  # openpyxl引入模块
 
 
 
def write_to_excel(path: str, sheetStr, info, data):
 
    #     实例化一个workbook对象
    workbook = openpyxl.Workbook()
    # 激活一个sheet
    sheet = workbook.active
    # 为sheet设置一个title
    sheet.title = sheetStr
 
    # 添加表头(不需要表头可以不用加)
    data.insert(0, list(info))
    # 开始遍历数组
    for row_index, row_item in enumerate(data):
 
        for col_index, col_item in enumerate(row_item):
            # 如果有表头 第二种数据格式就要价格判断单独处理表头
                    if row_index == 0:
                        # 直接写入 col_item的值
                        sheet.cell(row=row_index + 1, column=col_index + 1, value=col_item)
                    else:
                        # 获取字典中 {'name': 'John Brown'}, {'age': 18}, {'address': 'New York No. 1 Lake Park'}
                        # list数组列表后为 ['John Brown',18,'New York No. 1 Lake Park']
                        arr2 = list(col_item.values())
                        # 数组转换为字符串
                        str2 = ','.join(str(i) for i in arr2)
                        # 写入
                        sheet.cell(row=row_index + 1, column=col_index + 1, value=str2)
 
 
    # 写入excel文件 如果path路径的文件不存在那么就会自动创建
    workbook.save(path)
    print('写入成功')
 
 
 
 
if __name__ == '__main__':
 
    # 数据结构1 path 文件的路径
    path = r'D:\Python\Project\demo2.xlsx'
    # 数据结构1Excel 中sheet 的名字
    sheetStr = '这是数据结构2'
 
    info = ['name', 'age', 'address']
    # 数据结构2数据
    writeData = [[{'name': 'John Brown'}, {'age': 18}, {'address': 'New York No. 1 Lake Park'}]]
 
    # 执行
    write_to_excel(path, sheetStr, info, writeData)
View Code

 关于python读写CSV的操作实例,可以参考知乎文章:https://zhuanlan.zhihu.com/p/25581975。

2、

关于openpyxl读写excel表格的数据,如何添加序号或新增列呢?具体思路是分别读取两个表格文件,构造数据,处理数据。将处理好的数据写入新的Excel表格文件里。可参考文章:https://blog.csdn.net/zhouz92/article/details/106950345

如何向excel追加写入列数据,可以参考:https://blog.csdn.net/weixin_41639678/article/details/119675355。

import openpyxl
from openpyxl.cell.cell import ILLEGAL_CHARACTERS_RE
from openpyxl.utils import get_column_letter, column_index_from_string

# 向sheetobj中的columnname列从start_row开始写入listdata
def insert_listdata_to_column(sheetobj,listdata,column_name,start_row=2):
    colindex = column_index_from_string(column_name)
    for rowindex in range(start_row, start_row + len(data)):
        val = data[rowindex - start_row]
        try:
            sheet.cell(row = rowindex,column = colindex,value = val)
        except:
            val = ILLEGAL_CHARACTERS_RE.sub(r'',val)
            sheet.cell(row = rowindex,column = colindex,value = val)

column_mapping = {
    "A":[1,2,3,4,5],
    "b":["aa","bb","cc","dd","ee"]
}

#向已经存在的表格写入
wb = openpyxl.load_workbook(dest_file)
sheet = wb["sheetname"]
for key,val in column_mapping.items():
    col_name = key
    data = val
    insert_listdata_to_column(sheet,data,col_name,2)
wb.save(dest_file)

#创建新的表格
wb = openpyxl.Workbook()
sheet = wb.active
for key,val in column_mapping.items():
    col_name = key
    data = val
    insert_listdata_to_column(sheet,data,col_name,5)
wb.save("ttt.xlsx")
View Code

 逐列写入参考:https://zhuanlan.zhihu.com/p/105703297。

3、

参考其他人写的用wxauto库实现不同联系人聊天记录的获取,其实就是把联系人列表读取传入参数。可以参考(链接:https://blog.csdn.net/xiaozi_001/category_11943554.html):

from wxauto import *

# 获取当前微信客户端
wx = WeChat()

# 获取会话列表
wx.GetSessionList()


###############################
# 1、获取默认窗口聊天信息
###############################
def get_default_window_messages():
    # 默认是微信窗口当前选中的窗口
    # 输出当前聊天窗口聊天消息
    msgs = wx.GetAllMessage
    for msg in msgs:
        print('%s : %s' % (msg[0], msg[1]))

    ## 获取更多聊天记录
    wx.LoadMoreMessage()
    msgs = wx.GetAllMessage
    for msg in msgs:
        print('%s : %s' % (msg[0], msg[1]))


###############################
# 2、获取指定窗口聊天信息
###############################
def get_window_messages_from_list(whos):
    for who in whos:
        print("************************************\n")
        print("开始切换聊天窗口为:", who)
        wx.ChatWith(who)
        print("当前聊天窗口为:", who)
        msgs = wx.GetAllMessage
        for msg in msgs:
            print('%s : %s' % (msg[0], msg[1]))
        print("************************************\n")


if __name__ == '__main__':
    # get_default_window_messages()
    
    # 单个
    whos = ['文件传输助手']  # 适用于中文版微信
    # whos = ['File Transfer'] # 适用于 英文版微信
        
    # 多个
    # whos = ['文件传输助手', '你的微信好友备注' ]  # 适用于中文版微信

    get_window_messages_from_list(whos)
View Code

 可以向群聊发送文件和信息,可以参考(链接:https://blog.csdn.net/xiaozi_001/article/details/126079305):

from wxauto import *

# 获取当前微信客户端
wx = WeChat()

# 获取会话列表
wx.GetSessionList()


########################################################################################################################
# 函数功能: 单个用户 单个文件发送
########################################################################################################################
def send_file_to_single_user(file, user):
    # 向某人发送文件(以`文件传输助手`为例,发送三个不同类型文件)
    print("******************************************")
    try:

        print(f"开始向单个用户`{user}`发送文件:{file}")
        wx.ChatWith(who)  # 打开`文件传输助手`聊天窗口
        wx.SendMsg("123")
        wx.SendFiles(file)
        print("发送完毕")
    except Exception as e:
        print("发送失败,原因:", e)
    print("******************************************")


########################################################################################################################
# 函数功能: 单个用户 单个文件发送
########################################################################################################################
def send_files_to_mul_user(files, users):
    print("******************************************")
    # 向某人发送文件(以`文件传输助手`为例,发送三个不同类型文件)

    for who in users:
        print(f"开始跟{who}发送文件")
        wx.ChatWith(who)
        for file in files:
            print(f"向用户`{who}`发送文件:{file}")
            wx.SendFiles(file)

    print("发送成功")
    print("******************************************")


if __name__ == '__main__':
    ####################################################################################################################
    # 函数功能: 单个用户 单个文件发送
    ####################################################################################################################
    file = r'C:\Users\Pictures\202205\01.jpg'  # 修改为你的文件路径
    who = '文件传输助手'     # 适用于中文版微信
    send_file_to_single_user(file=file, user=who)

    ####################################################################################################################
    # 函数功能: 多个用户 每个用户发送多个文件
    ####################################################################################################################
    whos = ['文件传输助手', '什么']  # 适用于中文版微信
    files = [r'C:\Users\Pictures\202205\01.jpg',
             r'C:\Users\Pictures\202205\02.jpg']  # 修改为你的文件路径
    send_files_to_mul_user(files=files, users=whos)
View Code

 4、

具体获取联系人表格,并返回字典,从字典中获取键值对返回列表的代码:

# -*- coding:utf-8 -*-
import pandas as pd
import uiautomation as auto
from pywinauto.application import Application
from pywinauto.timings import Timings
import win32gui, win32con
import win32clipboard as wc
import time, random
import os
import openpyxl

def get_xls():
    # 打开参数表
    print("获取参数中")
    wb = openpyxl.load_workbook("D:\python-scripts\Clawer_wetchat\param.xlsx")
    wscs = wb["参数"]
    lst1 = []
    lst2 = []
    for i in range(2,6):
        groupindex = wscs['A'+str(i)]  # 转换为列表组名
        groupname = wscs['B'+str(i)]
        groupcount = len(str(groupindex))
        lst1.append(groupindex.value)
        lst2.append(groupname.value)
    dictd = dict(zip(lst1, lst2))
    print("共计:" + str(groupcount) + "")
    return dictd

data = get_xls()
print(data.values())
def values_func(xls):
    values = []
    for i in data.values():
        values.append(i)
    return values

print(values_func(data))
View Code

 

posted @ 2022-07-21 10:24  dion至君  阅读(57)  评论(0编辑  收藏  举报