day17

1. 作业

'''
作业题:
    1. 创建data.txt文件写入数据 1-100之间整数。1000行. (添加功能,写入后对数据进行读取)

        import random
        #普通方法操作文件
        f = open('./data.txt','w+')
        for i in range(1000):
            f.write(str(random.randint(1,100))+'\n')
            f.seek(0)
            print(f.readline())
        f.close()
    
    2. 在当前目录下新建子目录img, 内部包含100个文件,文件名各不相同(X4G5.png)
        将当前img目录所有后缀由.png改为.jpg
        
        import os, random
        
        # 生成验证码
        def genCode(n):
            code = ''
            for i in range(n):
                C1 = str(random.randint(0,9))
                C2 = chr(random.randint(65,90))
                code += random.choice([C1,C2])
            return code
        
        # 创建img文件夹并创建.png文件
        def createFiles():
            os.mkdir('./img/')
            for i in range(100):
                with open('./img/'+genCode(4)+'.png','w') as f:
                    pass
        
        # 重命名文件
        def renameFiles(path):
            for file in os.listdir(path):
                os.rename(os.path.join(path,file), os.path.join(path,file[:-3]+'jpg'))
        
        if __name__ == '__main__':
            # createFiles()
            renameFiles('./img/')
            
    3. 读取文件内容:.txt文件,存储学生成绩,汇总求平均分
    
        sum, count = 0, 0
        with open('./score.txt', mode='r', encoding='utf-8') as f:
            for line in f:
                if line.split(',')[1].strip():
                    sum += float(line.split(',')[1].strip())
                count += 1
            average = sum / count
            print('总分:{},人数:{}, 平均分:{}'.format(sum, count, average))

    
    4. 笔试题
        1) 生成一个文件----文件读写:ips.txt,
            容量:120行
            内容:ip: 172.25.254.0/24网段的IP
        2) 读取ips.txt文件,统计文件中ip出现频率前10的ip地址
            import random
            
            def create_ip_file(filename):
                ip = ['172.25.254.'+ str(i) for i in range(0,25)]
                with open(filename,'a+') as f:
                    for i in range(120):
                    #random.sample(ip, 1)生成一个列表
                        f.write(random.sample(ip, 1)[0]+'\n')
            
            def sort_by_ip(filename):
                ips_dict = {}
                with open(filename) as f:
                    for ip in f:
                        if ip in ips_dict:
                            ips_dict[ip] += 1
                        else:
                            ips_dict[ip] = 1
                sorted_ip = sorted(
                    ips_dict.items(),key=lambda x:x[1],reverse=True
                )[:10]
                return sorted_ip
            
            if __name__ == '__main__':
                # create_ip_file('./ips.txt')
                print(sort_by_ip('ips.txt'))
'''

2. IO

2.1 with用法

with 关键字 用来打开文件并获取句柄,可省略关闭句柄的操作。原因如下:

  • 将写缓存同步到磁盘
  • 系统中‘进程-正在运行的程序’ 打开文件的次数有限的,如果超过了系统限制 会导致操作文件失败。

常规操作文件方法

# 1. 打开文件
file = open('./Demo.py')
for row in file:
    print(row)
file.close()

避免文件操作失败,异常处理方式执行

try:
    file = open('./Demo.py')
    for row in file:
        print(row)
except Exception as e:
    print(e)
finally:
    file.close()

with关键字Python2.5版本后新增,作为一种异常处理的方式

  • 适用于对资源进行访问的场合,确保是否操作过程中出现异常都会自动完成清理工作

    • 释放系统资源

    • 文件自动关闭功能

    • 线程锁的自动获取、释放

with open('./Demo.py') as f:
    for row in f:
        print(row)

2.2 csv

CSV- 字符分割值 常见的文本类型

  • 用于存放表格数据,包含数字、字符。python内置csv模块

    import csv
    help(csv)
    
  1. csv的写

    写操作通过创建一个writer对象实现

    writer(fileobj, dialect='excel', *args, **kwargs)

    • writer对象前提:需要传入一个文本对象,然后才能在这个基础上调用csv写入方法:
      • 写入一行:writerow(seq) seq作为一维数据类型
      • 写入多行:writerows(seq) seq作为二维数据类型
    import csv
    
    headers = ['class','name','year']
    rows = [
        [1,'xiaoming',2020],
        [1,'xiaohei',2020],
        [2,'xiaozhang',2019],
        [2,'xiaoli',2019]
    ]
    #中文字符要加“encoding="utf-8"”
    with open('csvFile.csv','w') as f:
        f_csv = csv.writer(f)
        f_csv.writerow(headers)
        f_csv.writerows(rows)
    
   
2. 写入字典数据

   ```python
   import csv
   headers=["class","name","year"]
   rows=[
       {'class':1,'name':"小敏",'year':2020},
       {'class':1,'name':"小明",'year':2020},
       {'class':2,'name':"小华",'year':1919},
       {'class':2,'name':"小芳",'year':2019}
   ]
   #中文字符要加“encoding="utf-8"”
   with open('./csvF.csv',"w",encoding="utf-8") as f:
       f_csv=csv.DictWriter(f,headers)
       f_csv.writeheader()
       f_csv.writerows(rows)
  1. csv数据读取

    使用reader读取,csv.reader(f).结果返回一个可迭代对象

    with open("./csvF.csv",encoding="utf-8") as f:
        f_csv1=csv.reader(f)
        for i in f_csv1:
            print(i)
    

2.3 Json

json:JavaScript Object Nonation:数据交换格式,python可用json模块实现:

  • json.dumps():编码
  • json.loads():解码
  • json中只能是字符串格式,只能识别双引号

Python与Json数据格式的对比

pythonjson
dictobject
list/tuplearray
strstring
int/floatnumber
True/Falsetrue/false
Nonenull

实例

import json
data={
    "num":1001,
    "name":"Alex",
    "age":19
}
json_str=json.dumps(data)
print("原始数据为",data,type(data))
print("json编码后的数据为",json_str,type(json_str))
"""
原始数据为 {'num': 1001, 'name': 'Alex', 'age': 19} <class 'dict'>
json编码后的数据为 {"num": 1001, "name": "Alex", "age": 19} <class 'str'>
"""
data1=json.loads(json_str)
print(data1==data)
# True

Json文件操作

  • json.dump():文件编码
  • json.load():文件解码
#写
with open("data.json",'w')  as f:
    json.dump(data,f)
#读  
with open("data,json",'r') as f:
    data=json.load(f)
    

2.4 openpyxl

openpyxl模块是第三方模块,操作excel表格

from openpyxl import Workbook,load_workbook
wb=Workbook()#创建工作簿
wb=load_workbook("xxxx")#导入工作簿
wb.save("xxxxx")#保存工作簿
wb.close()#关闭工作簿
wb.sheetnames#获取所有的工作表
wb.create_sheet("sheetname")#创建工作表
ws=wb.active选择激活的工作簿
ws=wb[“sheetname”]根据表名选择工作表
ws=wb.sheetnames[i]根据所索引选择工作表
ws.title获取工作表的标题
ws.max_row获取工作表的行数
ws.max_column获取工作表的列数
ws[“A1”]//ws.cell(row,column)获取工作表的某个单元格
ws.cell(row,column,value)设置工作表的某个单元格的值
ws.cell(row,column).value设置(获取)工作表的某个单元格的值
ws[“A1”:“C3”]获取工作表的某个范围的单元格

1.保存文件的时候,文件不能在其他软件中打开。

             |

| ws[“A1”]//ws.cell(row,column) | 获取工作表的某个单元格 |
| ws.cell(row,column,value) | 设置工作表的某个单元格的值 |
| ws.cell(row,column).value | 设置(获取)工作表的某个单元格的值 |
| ws[“A1”:“C3”] | 获取工作表的某个范围的单元格 |

1.保存文件的时候,文件不能在其他软件中打开。

2.openpyxl只能处理xlsx新版本文件,不能处理xls就版本文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值