利用Python高效偷懒。

Python 与 csv库的偷懒过程

我们在生活上,职场上会遇到各种事情。而繁琐的工作不可避免

而今天,将由我来带你们进入Python偷懒!

A君目前在一家资产评估公司实习,他的工作日常就是跑遍市区里的住宅小区,调查小区的地址、建筑年份和每栋楼里每个单元里每一户的朝向和面积。

比如一户的资料是:富安花园(小区)3栋 2单元 401户;朝向:南北朝向;面积:90平方。他需要把每一户的信息都记录下来。向和面积。

为了节省时间,通常他们会当场把一栋楼里所有单元的数据画在一张平面图里。等回去之后,再把平面图记录的数据,录入到excel表里。

利用Python高效偷懒。_第1张图片

举个例子,上面这张平面图表示的是这一栋有4个单元,每个单元有15层楼,其中1,2单元有两户,面积和朝向是140平方,南北朝向。

A君抱怨原本看房已经很累人了,录入更烦。可能你觉得用excel的自动填充功能不是很方便吗,事情远没有这么简单。

确实,有一些重复的单元格只要填一次,自动下拉就可以复制粘贴,对于A君(excel菜鸟)来说,每次只要手动输入户室号就可以。(当然掌握一些excel技巧可以节省一些功夫)

利用Python高效偷懒。_第2张图片

好不容易搞完3单元,到了4单元,面积和朝向又不一样了。求此时A君心里的阴影面积。

而此刻我们则针对这个项目来'偷懒'。

在此处调用了csv模块来联系Excel

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)
    #用writerow()函数将表头写进csv文件里

此时运行效果:

利用Python高效偷懒。_第3张图片

改进一下:

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
print(start_floor_rooms)

再来存放下楼层数据:

start_floor = '3'
start_floor_rooms = {301:[1,80],302:[1,80],303:[2,90]}
#初始楼层的数据

unit_rooms = {}
unit_rooms[int(start_floor)] = start_floor_rooms
#创建一个存放单元所有楼层数据的字典
print(unit_rooms)

来到最后验收成果:

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('恭喜你,资产录入工作完成!') 

Python来实现自动化来便利我们的生活,对其合理的利用,使生活更有效率,更有成就感!

你可能感兴趣的:(python,开发语言)