Python文件操作-代码案例
文章目录
- 文件
- 打开文件open
- 写文件
- 上下文管理器
- 第三方库
- 简单应用案例
- 使用python生成二维码
- 使用python操作excel
- 程序员鼓励师
- 学生管理系统
文件
变量就在内存中,文件在硬盘中.
内存空间更小,访问速度快,成本贵,数据容易丢失,硬盘空间大,访问慢,偏移,持久化存储.
\\在才是 \的含义,只有一个的话是转义字符.
打开文件open
#返回值是文件对象是内存上的一个变量
f=open('E:/test.txt','r')
print(type(f)) #<class '_io.TextIOWrapper'>python文件对象的名字#关闭文件(使用之后一定要关闭),打开文件是申请了一定的系统资源,资源有限,所以打开文件个数有限
f.close()
读写文件操作都可以拿着这个文件对象来操作,可以叫做句柄handler,挟天子以令诸侯.
#测试可以打开多少个文件(可通过配置文件设置)
count=0
flist=[]
while True:f=open('E:/test.txt','r')flist.append(f)count+=1print(f'打开的文件个数:{count}')

8189+3=8192=2^13
每个程序在启动的时候都会默认代开三个文件,标准输入,标准输出,标准错误.
python的垃圾回收机制GC,当上述代码不将f放到flist中时,会自动触发垃圾回收机制,让文件自动关闭,但是自动释放资源不一定及时,因此还是尽量手动释放.
写文件
中文和英文类似,在计算机中都是使用’数字’来表示字符,数字对应汉字版本有很多,主流是UTF8,GBK实际开发中就要保证文件内容的编码方式代码中操作文件的编码方式匹配.
f=open('E:/test.txt','r',encoding='utf8')
result=f.read(2) #指定几个字符,一个汉字也是一个字符在python中
print(result)
f.close()#按行读取 for循环
f=open('E:/test.txt','r',encoding='utf8')
for line in f:print(f"line={line}",end="")#print自动带有\n,end参数指定是啥,默认是换行
f.close()#readlines直接将整个文件内容读取出来
f=open('E:/test.txt','r',encoding='utf8')
lines=f.readlines()
print(lines)
f.close()
上下文管理器
万一中间代码中有条件判定,函数返回抛出异常就会忘记后面的关闭文件.
当with对应的代码块执行结束,就会自动的执行f的close操作
def Func():with open('E:/test.txt','r',encoding='utf8') as f:#各种代码lines= f.readlines()print(lines)
#文件查找工具
#输入要查找的路径,文件名
#递归查找,遇到子目录就进到目录中,进行查找
#os.walk只需要使用简单的循环.,就可以实现递归的
import os
inputPath=input("请输入路径:")
pattern=input("输入关键字:")
#帮助理解os.walk()函数
# for dirpath,dirname,filename in os.walk(inputPath):
# print("------------------------------")
# print(f"dirpath={dirpath}")
# print('dirnames:')
# for name in dirname:
# print(name)
# print("filenames:")
# for name in filename:
# print(name)
for dirpath,_,filename in os.walk(inputPath):for f in filename:if pattern in f:print(f"{dirpath}/{f}")
inputPath):for f in filename:if pattern in f:print(f"{dirpath}/{f}")
# 翻转单词顺序
#使用空格进行切分,然后放在列表中,然后逆序
def reverse_word(s: str):tokens=s.split(' ')tokens.reverse()return ' '.join(tokens)print(reverse_word("I am a student."))#旋转字符串
def rorateString(s,goal):if len(s)!=len(goal):return Falsereturn goal in s+sprint(rorateString("abcde","cdeab"))#word[i]是否是s的前缀 startswith()
def countPrefixes(words: list,s: str):count=0for word in words:if s.startswith(word):count+=1return count
第三方库
手机应用商店方便收罗各种公司的软件,python的第三方库也是如此.python官方搞了一个网站pypi,收集各种第三方库,使用pip工具就能下载.安装python时已经被装好了,可以直接用.pip install +库名,然后就导入模块就行.
简单应用案例
使用python生成二维码
本质上就是一个字符串,生活中的都是一个URL.
qrcode第三方库
import qrcode
img=qrcode.make("xiaoawei 必牛逼!")
img.save('qrcode.png')
使用python操作excel
第三方库
读取Excel使用xlrd模块,修改用xlwt模块
#操作excel
import xlrd
# 打开xlsx
xlsx=xlrd.open_workbook('E:/test/test.xlsx')
# 获取指定的标签页
table=xlsx.sheet_by_index(0)
#获取表格中多少行
nrows=table.nrows
# 循环统计操作
total=0
count=0
for i in range(1,nrows):#拿到班级下标,每一行的第一列classId=table.cell_value(i,1)if classId==100:total+=table.cell_value(i,2)count+=1
print(f"平均分:{total/count}")
程序员鼓励师
每间隔一段时间就让电脑发出声音鼓励一下:
-
播出声音~playsound第三方库
-
监听键盘按键,pynput库.连续按键N次就播放音频
准备音频文件,拷贝到项目目录
from pynput import keyboard
from playsount import playsound
import random
from threading import Threadsoundlist=['sound/1.mp3','sound/2.mp3','sound/3.mp3']
count=0
def onRelease(key):'''这个函数,在用户释放键盘按键时就会被调用这个函数不是主动调用的,交给listener,由listener在用户释放按键的时候自动调用像这样不是自己主动调用,而是交给别人在合适的时机进行调用,这样的函数叫回调函数:param key:用户按下了哪个键:return:'''print(key)count +=1if count%20==0:#播放音频i=random.randint(0,len(soundlist)-1)#播放音频消耗时间多,造成输入的卡顿#可以使用线程,播放音频#playsound(soundlist[i])t=Thread(target=playsound,args=(soundlist[i],))t.start()listener=keyboard.Listener(on_release=onRelease)
listener.start()
listener.join()
学生管理系统
import os.path
import sys#列表每个元素都是一个字典
students=[]def menu():print('---------')print('1.新增学生')print('2.显示学生')print('3.查找学生')print('4.删除学生')print('0.退出程序')print('---------')choice = input("请输入你的选择")return choicedef insert():print("新增学生开始")id=input('请输入学生的学号')name=input('请输入学生的姓名')gender=input('请输入性别')if gender not in ('男','女'):print('性别不合理')returnclassname=input('请输入班级名称')#使用字典聚合student={'id':id,'name':name,'gender':gender,'classname':classname}global studentsstudents.append(student)save()print("新增学生完毕")def show():print('学生信息如下:')for s in students:print(f"[{s['id']}]\t[{s['name']}]]\t[{s['gender']}]\t[{s['classname']}]")print(f'学生信息如上,一共{len(students)}条数据')def find():print("查找学生开始")count=0name=input('请输入要查找同学的姓名')for s in students:if name==s['name']:print(f"查找->[{s['id']}]\t[{s['name']}]]\t[{s['gender']}]\t[{s['classname']}]")count+=1print(f"查找学生结束,一共查找了{count}个匹配的学生")def erase():print('删除学生开始')id=input('请输入你想删除的学生id')for s in students:if id==s['id']:print(f"删除->[{s['id']}]\t[{s['name']}]]\t[{s['gender']}]\t[{s['classname']}]")students.remove(s)save()print('删除学生完毕')
def save():'''用于存档:return:'''with open('record.txt','w',encoding='utf8') as f:for s in students:f.write(f"{s['id']}\t{s['name']}\t{s['gender']}\t{s['classname']}\n")print(f'存档成功,一共存档了{len(students)}条数据')
def load():'''用于读档操作如果读档文件不存在,就直接跳过读档,避免读方式异常:return:'''if not os.path.exists('record.txt'):returnglobal students#读档的时候要保证先把旧的数据给清理干净students=[]with open('record.txt','r',encoding='utf8') as f:for line in f:#针对这一行数据,按照\t进行切分操作#切分之前,要去除末尾的换行,#去掉开头和结尾的空白符号line=line.strip()tokens=line.split('\t')if len(tokens) !=4:print(f'当前行存在格式问题!line={line}')continuestudent={'id':tokens[0],'name':tokens[1],'gender':tokens[2],'classname':tokens[3]}students.append(student)print(f'读档成功,共读档了{len(students)}条数据')def main():print('-----------------------------------')print(' 欢迎来到学生管理系统 ')print('-----------------------------------')load()while True:choice=menu()if choice=='1':insert()elif choice=='2':show()elif choice=='3':find()elif choice=='4':erase()elif choice =='0':sys.exit(0)else:print("输入有误,请重新输入")print('bye~')
main()
#约定数据存储在py文件同级目录下的record.txt中,文档中按行文本的方式表示
# 每一行表示一个学生,信息之间用\t来分割(tab)
#
相关文章:
Python文件操作-代码案例
文章目录文件打开文件open写文件上下文管理器第三方库简单应用案例使用python生成二维码使用python操作excel程序员鼓励师学生管理系统文件 变量就在内存中,文件在硬盘中. 内存空间更小,访问速度快,成本贵,数据容易丢失,硬盘空间大,访问慢,偏移,持久化存储. \\在才是 \的含义…...
活动目录(Active Directory)管理,AD自动化
每个IT管理员几乎每天都在Active Directory管理中面临许多挑战,尤其是在管理Active Directory用户帐户方面。手动配置用户属性非常耗时、令人厌烦且容易出错,尤其是在大型、复杂的 Windows 网络中。Active Directory管理员和IT经理大多必须执行重复和世俗…...
Allegro如何使用Vertext命令修改丝印线段的形状操作指导
Allegro如何使用Vertext命令修改丝印线段的形状操作指导 在用Allegro画丝印线段的时候,如果画了一段不是自己需要形状的线段,无需删除重画,可以用Vertext命令直接编辑 如下图 修改前 修改后 具体操作如下 选择Edit...
Leetcode力扣秋招刷题路-0030
从0开始的秋招刷题路,记录下所刷每道题的题解,帮助自己回顾总结 30. 串联所有单词的子串 给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。 s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。…...
基于Prometheus和k8s搭建监控系统
文章目录1、实验环境2、Prometheus介绍?3、Prometheus特点3.1 样本4、Prometheus组件介绍5、Prometheus和zabbix对比分析6、Prometheus的几种部署模式6.1 基本高可用模式6.2 基本高可用远程存储6.3 基本HA 远程存储 联邦集群方案7、Prometheus的四种数据类型7.1 C…...
类和对象(下)
类和对象(下)再谈构造函数构造函数体赋值初始化列表explicit关键字static成员静态成员的特性友元友元函数友元类成员函数做友元内部类匿名对象编译器的一些优化再谈构造函数 构造函数体赋值 在创建对象的时候编译器会调用构造函数给对象中的成员变量一…...
达梦数据库单机部署
一、安装前准备 1. 安装环境 操作系统:redhat7.9 达梦数据库版本:V8 内存:2G CPU:x86_64 2. 新建用户组和用户 groupadd dinstall useradd -g dinstall -m -d /home/dmdba -S /bin/bash dmdba passwd dmdba3. 配置参数 vi /etc/security/limits.conf #在末尾添加以下内…...
从零到一学习Flutter——(二)状态和路由
背景 前文提到了Widget的状态,在Flutter中一切都是Widget,那么由Widget组成的页面,会有很多复杂的父子关系,要想交互友好,则需要这些Widget进行通讯,也就是所谓的状态管理。 同时在了解了布局之后,我们会写出很多的页面,那么在这些页面切换,也是一个很重要的能力。 …...
TC358774XBG/TC358775XBG替代方案|CS5518替代TC358774XBG/TC358775XBG设计DSI转LVSD设计资料
TC358774XBG/TC358775XBG替代方案|CS5518替代TC358774XBG/TC358775XBG设计DSI转LVSD设计资料 TC358774XBG/TC358775XBG 芯片的主要功能是作为 DSI - LVDS 通信协议桥接,主芯片的视频数据可通过 DSI 链路流 出,以驱动兼容 LVDS 的显示板。换句话说&#x…...
Linux---Kernal与Shell讲解
目录 Shell简介 什么是Shell Shell分类 内核Kernal Shell简介 什么是Shell 我们首先需要知道一台完整的计算机是由硬件组成的,而人不可以直接与硬件交互,为了完成交互,进行了以下的操作 将硬件设备交由内核管理,给硬件套个内…...
Thiol-PEG-Acid,HS-PEG-COOH,巯基-聚乙二醇-羧基试剂供应
一:产品描述 1、名称 英文:HS-PEG-COOH,Thiol-PEG-Acid 中文:巯基-聚乙二醇-羧基 2、CAS编号:N/A 3、所属分类:Carboxylic acid PEG Thiol PEG 4、分子量:可定制,Thiol-聚乙二…...
数据结构与算法基础-学习-09-线性表之栈的理解、初始化顺序栈、判断顺序栈空、获取顺序栈长度的实现
一、个人理解栈是线性表的一种衍生,和之前的顺序表和链表在插入和删除元素上有较大差异,其他基本相同,栈是数据只能插入表的尾部(栈顶),删除数据时只能删除表的尾部(栈顶)数据&#…...
深入Kafka核心设计与实践原理读书笔记第二章
1 生产者 生产逻辑 配置生产者客户端参数及创建相应的生产者实例。构建待发送的消息。发送消息关闭实列 参数说明 bootstrap.servers :用来指定生产者客户端链接Kafka集群搜需要的broker地址清单,具体格式 host1:port1,host2:port2,可以设置一个或多…...
知乎kol投放怎么做?知乎kol资源从哪里找?
每个领域都有一些比较专业且具有话语权的大V博主,他们推荐某个产品或是品牌就能对粉丝产生很深的影响力,影响用户消费决策。 互联网时代,每个热门的内容平台上都活跃着一大批kol博主,做kol投放具有很高的商业价值。 知乎内容社区…...
python设计模式-享元设计模式,抽象工厂设计模式,面向对象设计模式
享元设计模式 享元(flyweight)设计模式属于结构设计模式类别。 它提供了一种减少对象数的方法。 它包含各种有助于改进应用程序结构的功能。享元对象最重要的特性是不可变的。 这意味着一旦构建就不能修改它们。 该模式使用HashMap来存储引用对象 如何实现享元(flyweight)设计…...
10条终身受益的Salesforce职业发展建议!
Salesforce这个千亿美金巨兽,在全球范围内有42,000多名员工。作为一家发展迅速的科技公司,一直在招聘各种角色,包括销售、营销、工程师和管理人员等。 据IDC估计,从2016年到2020年,该生态系统创造了190万个工作岗位。…...
电子科技大学人工智能期末复习笔记(四):概率与贝叶斯网络
目录 前言 概率 概率公式 贝叶斯公式 链式条件概率 例题 1. 求联合概率分布/边缘概率分布/条件概率分布 2. 灵活运用贝叶斯公式 概率总结 贝叶斯网络 判断独立性 两个事件独立的判断 条件独立性的判断 假设条件独立的链式法则 ⚠Active / Inactive Paths 判断独…...
码上掘金实现电子木鱼
前言 前几天在朋友圈看到“敲电子木鱼”的视频,敲一下木鱼就提示“功德 1”,还带有敲击声和念经的声音,感觉挺有意思的。 心血来潮,捣鼓了一晚上,借助码上掘金实现了这个功能。 展示效果 素材 准备素材如下&#…...
深度学习_L2正则化
文章目录参考博客正则化介绍正则化的实现参考博客 深入理解L1、L2正则化 PyTorch 实现L2正则化以及Dropout的操作 正则化介绍 正则化(Regularization)是机器学习中一种常用的技术,其主要目的是控制模型复杂度,减小过拟合。最基…...
第一章 认识Python
本章目录 一、初识Python 二、Python环境安装 三、Python代码的执行 四、Python集成开发环境 五、Python2.x与Python3.x的区别 六、本章小结 Python代码的编辑和运行方式主要分为两种:交互模式和脚本模式。 在交互模式下, 用户输入Python代码并按…...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
