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)
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)
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数据格式的对比
python | json |
---|---|
dict | object |
list/tuple | array |
str | string |
int/float | number |
True/False | true/false |
None | null |
实例
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就版本文件。