pyhton中namedtuple需求以及表格的操作

# namedtuple的需求:

t = ("kiosk", 'pts/0', 'localhost')

info = {'kiosk' : {
            'name': "kiosk",
            'node': 'localhost'
}}
因为元组的局限性:不能为元组内部的数据进行命名,所以往往我们并不知道一个元组所要表达的意义,
所以在这里引入了 collections.namedtuple 这个工厂函数,来构造一个带字段名的元组。
具名元组的实例和普通元组消耗的内存一样多,因为字段名都被存在对应的类里面。这个类跟普通的对象
实例比起来也要小一些,因为 Python 不会用 __dict__ 来存放这些实例的属性。


# 如何实现
def namedtuple(typename, field_names, *, verbose=False, rename=False, module=None):
    - typename: 元组名称
    - field_names : 元组中元素的名称
    - rename: 如果元素名称中包含python关键字, 必须设置rename=True

"""

# 1. 判断是否可迭代?
import random
from collections import Iterable
print(isinstance('hello', Iterable))


# 2. 字典key值次数统计
from collections import Counter
# 跟踪某个key值出现的次数, 是一个无序的容器 类型.
ips = ['172.25.254.%s' %(random.randint(1, 25)) for ip in range(1000)]
c = Counter(ips)
print(c.most_common(3))

# 3. 命名元组
from collections import  namedtuple
User = namedtuple("User", ['name', 'age', 'scores'])
u = User('fentiao', 10, 100)
print(u)
print(u.name)

在这里插入图片描述

"""
# 1. Excel的基本定义
- 工作薄(workbook):一个Excel电子表格;
- 工作表(sheet): 每个工作薄里面包含的表, 默认有3个;
- 活动表(active sheet): 用户当前查看的工作表;
- 单元格(cell): 特定的行和列构成的格子;
- 列(column): 列地址是从A开始的;
- 行(row):行地址是从1开始的;




# 2. 版本 < 2007使用xlrd模块实现
# import xlrd
# wb = xlrd.open_workbook('/tmp/Book1.xls')
# print(wb.sheet_names())

"""

import openpyxl

# 1. 导入工作薄
wb=openpyxl.load_workbook('/tmp/Book1.xlsx')

# 2. 查看包含的工作表
print(wb.sheetnames)

#3. 查看当前活动表
print(wb.active)

# 4. 从工作薄中选择要操作的工作表
sheet = wb['Sheet2']

# 5. 查看制定单元格的数据
cell = sheet.cell(row=1, column=1)
# cell = sheet['A1']

# 6. 获取单元格详细信息
print(cell.value)

# 7. 修改单元格信息
cell.value = 1111111

# 8. 获取工作表的总行和总列数
print(sheet.max_column)
print(sheet.max_row)

# 9. 修改单元表的名称
print(sheet.title)
sheet.title = "修改的工作表"

# 10. 遍历历EXCEL表格的所有数据;
print(sheet.rows)   # 返回的是一个生成器
# 遍历历每一行
for row in sheet.rows:
    # 获取每一行, 每个单元格的数据
    for cell in row:
        print(cell.value, end='\t')
    print('\n')

# 11. 保存修改的信息
wb.save('/tmp/Book1.xlsx')
import openpyxl

def create_excel(wbname,data,sheetname='Sheet1'):
    """
    将指定的信息保存到新建的excel表格中
    :param wbname:
    :param data:
    :param sheetname:
    :return:
    """
    print('正在创建excel表格%s'%(wbname))
    # 如果文件存在,实例化对象
    # wb = openpyxl.load_workbook(wbname)

    #  如果文件不存在, 自己实例化一个WorkBook的对象;
    wb=openpyxl.Workbook()

     # 获取当前活动工作表的对象
    sheet=wb.active

    # 修改工作表的名称
    sheet.title=sheetname

     # 将数据data写入excel表格中;
    print('正在写入数据...')
    for row,item in enumerate(data):
        for column,cellValue in enumerate(item):
            cell=sheet.cell(row=row+1,column=column+1,value=cellValue)

    wb.save(wbname)
    print("保存工作薄%s成功......." % (wbname))

def readwb(wbname,sheetname=None):
    # 1. 加载工作薄
    wb = openpyxl.load_workbook(filename=wbname)

    # 2. 选择操作的工作表
    if not sheetname:
        sheet = wb.active
    sheet = wb[sheetname]

    #  读取数据, 存储为python的数据结构
    goodsInfo = []
    for row in sheet.rows:
        rowValues = [cell.value for cell in row]
        goodsInfo.append(rowValues)
    return goodsInfo



if __name__ == '__main__':
     data = [
        ['书籍名称', '数量', '价格'],
        ['python核心编程', 60, 90],
        ['Java核心编程', 50, 120],
        ['Php核心编程', 100, 80],
    ]
     create_excel('doc/excel1.xlsx',data,'书籍信息统计')
     goodsInfo = readwb('doc/excel1.xlsx', '书籍信息统计')
     print(goodsInfo)

    #当有排序要求时,需要把表头拿出来,即表头不参与排序
    # ['书籍名称', '数量', '价格'] + [['python核心编程', 60, 90],
    #                         ['Java核心编程', 50, 120],
    #                         ['Php核心编程', 100, 80], ]

     # 按照商品数量进行排序
     numSortInfo = [goodsInfo[0]]+  sorted(goodsInfo[1:], key=lambda x: x[1])
     print(numSortInfo)
     create_excel('doc/sorted_by_num.xlsx',numSortInfo,'书籍信息统计按照数量排序')

     #  按照商品价格进行排序 sorted()
     priceSortInfo = [goodsInfo[0]] + sorted(goodsInfo[1:], key=lambda x: x[1])
     print(priceSortInfo)
     create_excel('doc/sorted_by_price.xlsx', numSortInfo, '书籍信息统计按照价格排序')

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/GLH_2236504154/article/details/87205978