• 练习之录入小区户型资料


    项目背景:

    某君的工作日常就是跑遍市区里的住宅小区,调查小区的地址,建筑年份,和每栋楼里每一个单元里每一户的朝向和面积

    比如一户的资料是:富安花园(小区)3栋 2单元 401户;朝向:南北朝向;面积:90平方。

    他需要把每一户的信息都记录下来,等回去之后,再把记录的数据,录入到excel表里。

    项目流程:

    1、明确项目目标

    • 设计一个程序,在终端输入模板数据后,程序自动录入剩下的数据。
    • 参考教程,学习csv模块的使用方法,参考教程:https://docs.python.org/3/library/csv.html
    • 需要录入的住宅信息:

      小区名字,地址,建筑年份,楼栋,楼层,单元,户室(层加户室),面积,朝向

       (锦绣花园,深圳市,2010, 2(共4栋),15(共15层),1003(共3室), 101 , 南北)

     (如一单元:3户室,01室 面积120,朝向南北,02面积100,朝向:东西,03面积160,朝向南北)

    2、分析过程,拆解项目

    • 版本1.0:输入固定表头,确定模板数据
    • 版本2.0:获取模板数据,复用模板数据
    • 版本3.0:写入csv文件,单元间循环

    3、逐步执行,代码实现

    • 版本1.0:将固定表头写入csv文件 
    import csv
    
    with open('assets.csv','w',newline=' ') as f:
        writer=csv.writer(csvfile,dialect='excel')
        header=['小区名称','地址','建筑时间','楼栋','单元','门牌','朝向','面积']
        writer.writerrow(header)
    • 版本2.0:获取模板数据,复用模板数据 
    #可复用的模板数据
    title=input('请输入小区名称:')
    address=input('请输入小区地址:')
    year=input('请输入建造年份:')
    block=input('请输入楼栋号:')
    
    start_floor=input('请输入起始楼层:')
    end_floor=input('请输入终止楼层:')
    last_number=input('请输入起始楼层门牌尾号:(如01,02,03等)')
    #记录楼层:门牌号,最大门牌尾号
    floor_rooms={}
    floor_last_number=[]
    • 版本3.0:写入csv文件,单元间循环
    import csv
    #调用csv模块
    with open('assets.csv', 'a', newline='') as csvfile:
    #调用open()函数打开csv文件,传入参数:文件名“assets.csv”、追加模式“a”、newline=''。
        writer = csv.writer(csvfile, dialect='excel')
        # 用csv.writer()函数创建一个writer对象。
        header=['小区名称', '地址', '建筑年份', '楼栋', '单元', '户室', '朝向', '面积']
        writer.writerow(header)
    
    title=input('请输入小区名称:')
    address = input('请输入小区地址:')
    year = input('请输入小区建造年份:')
    block = input('请输入楼栋号:')
    
    
    unit_loop = True
    while unit_loop:
        unit=input('请输入单元号:')
        start_floor = input('请输入起始楼层:')
        end_floor = input('请输入终止楼层:')
    
        # 开始输入模板数据
        input('接下来请输入起始层每个房间的门牌号、南北朝向及面积,按任意键继续')
    
        start_floor_rooms = {}
        floor_last_number = []
        # 收集起始层的房间信息
    
        # 定义循环控制量
        room_loop = True
        while room_loop:
            last_number = input('请输入起始楼层户室的尾号:(如01,02)')
            floor_last_number.append(last_number)
            #将尾号用append()添加列表里,如floor_last_number = ['01','02']
            room_number = int(start_floor + last_number)
            #户室号为room_number,由楼层start_floor和尾号last_number组成,如301
    
            direction = int(input('请输入 %d 的朝向(南北朝向输入1,东西朝向输入2):' % room_number ))
            area = int(input('请输入 %d 的面积,单位 ㎡ :' % room_number))
            start_floor_rooms[room_number] = [direction,area]
            # 户室号为键,朝向和面积组成的列表为值,添加到字典里,如start_floor_rooms = {301:[1,70]}
    
            continued= input('是否需要输入下一个尾号?按 n 停止输入,按其他任意键继续:')
            #加入打破循环的条件
            if continued == 'n':
                room_loop = False
            else:
                room_loop = True       
    
        unit_rooms = {}
        #新建一个放单元所有户室数据的字典
        unit_rooms[start_floor] = start_floor_rooms
        #unit_rooms={3:{301:[1,80],302:[1,80],303:[2,90],304:[2,90]}}
        for floor in range(int(start_floor) + 1, int(end_floor) + 1):
        #遍历除初始楼层外的其他楼层
            floor_rooms = {}
            #每个楼层都建立一个字典
            for i in range(len(start_floor_rooms)):
            #遍历每层有多少个房间,这里是3,即执行for i in range 3 的循环
                number = str(floor) + floor_last_number[i]
                info = start_floor_rooms[int(start_floor + floor_last_number[i])]
                # 依次取出字典start_floor_rooms键对应的值,即面积和朝向组成的列表
                floor_rooms[int(number)] = info
                #给字典floor_rooms添加键值对,floor_rooms = {401:[1,80]}
            unit_rooms[floor] = floor_rooms
        
        with open('assets.csv', 'a', newline='')as csvfile:
        #Mac用户要加多一个参数 encoding = 'GBK'
            writer = csv.writer(csvfile, dialect='excel')
            for sub_dict in unit_rooms.values():
                for room,info in sub_dict.items():
                    dire = ['', '南北', '东西']
                    writer.writerow([title,address,year,block,unit,room,dire[info[0]],info[1]])   
    
        unit_continue = input('是否需要输入下一个单元?按 n 停止单元输入,按其他任意键继续:')
        if unit_continue == 'n':
            unit_loop = False
        else:
            unit_loop = True
    
    print('恭喜你,资产录入工作完成!')     
  • 相关阅读:
    高并发下缓存失效问题及解决方案
    行为型设计模式
    Redisson
    行为型设计模式
    Docker 安装 Elasticsearch 和 Kibana
    行为型设计模式
    C# 使用 WebBrowser 实现 HTML 转图片功能
    .NET 程序下锐浪报表 (Grid++ Report) 的绿色发布指南
    .NET 程序员的 Playground :LINQPad
    Windows 服务器上的 WordPress 站点优化笔记
  • 原文地址:https://www.cnblogs.com/xiaopc/p/10490801.html
Copyright © 2020-2023  润新知