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代码并按…...
复习0206
目录 一、访问修饰符 一、权限范围 二、注意事项 二、封装(面向对象的三大特征之一) 一、封装的好处 二、封装的实现步骤 三、和构造器结合 四、练习题中的细节 一、访问修饰符 一、权限范围 访问修饰符用于控制方法和属性(成员变量…...
小红书如何查看笔记
小红书如何查看笔记 在小红书上找关键词的 6 大方法进阶版想要查找品类词、行业词、产品词、长尾词的小伙伴看过来,这一次我们就来给大家升级了 6 种找关键词的方法,也是我们的进阶版。 第一种,下拉框查找。我们只需要在小红书 AP 输入主要的…...
linux001之linux系统部署安装
注意:本次安装讲解以乌班图(Ubuntu) 虚拟机来说明讲解,既然学习linux,就无需用图形界面了,直接用服务器版本 1. 下载乌班图 网址:https://www.ubuntu.org.cn/download/server 然后就可以看到右下角有下载提示ÿ…...
服务异步通信 RabbitMQ-高级篇
服务异步通信RabbitMQ-高级篇服务异步通信RabbitMQ-高级篇1.消息可靠性1.1.生产者消息确认1.1.1.修改配置1.1.2.定义Return回调1.1.3.定义ConfirmCallback1.2.消息持久化1.2.1.交换机持久化1.2.2.队列持久化1.2.3.消息持久化1.3.消费者消息确认1.3.1.演示none模式1.3.2.演示aut…...
【PR】零基础快速入门教程
【PR】零基础快速入门教程PR(Premiere)能做什么?PR欢迎界面及新建项目工作区及窗口说明导入文件建立序列视频剪辑添加字幕导出视频使用软件:Premiere2020新年卷起来,写文章已近不能满足与我了,我要向着更前…...
Matlab 点云迭代加权最小二乘法拟合平面(抑制噪声)
不要虚掷你的黄金时代,不要去倾听枯燥乏味的东西,不要设法挽留无望的失败,不要把你的生命献给无知、平庸和低俗。这些都是我们时代病态的目标,虚假的理想。 ----王尔德 文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 受到之前博客的启发(Matlab 点云最小二乘…...
2023 软件测试行业内卷动荡,红利期过去后,何去何从?
前段时间席卷全互联网行业的内卷现象,想必有不少人都深陷其中。其实刚开始测试行业人才往往供不应求,而在发展了十几年后,很多人涌入这个行业开始面对存量竞争。红利期过去了,只剩内部争夺。 即便如此,测试行业仍有许…...
【王道数据结构】第六章(下) | 图的应用
目录 一、最小生成树 二、最短路径 三、有向⽆环图描述表达式 四、拓扑排序 五、关键路径 一、最小生成树 1、最小生成树的概念 对于一个带权连通无向图G (V,E),生成树不,每棵树的权(即树中所有边上的权值之和)也可能不同。设R为G的所…...
Leetcode:518. 零钱兑换 II(C++)
目录 518. 零钱兑换 II 问题描述: 实现代码与解析: 动态规划(完全背包): 原理思路: 377. 组合总和 Ⅳ 问题描述: 实现代码与解析: 动态规划(完全背包࿰…...
Java中类是什么
类(class)是构造对象的模板或蓝图。 我们可以将类想象成制作小甜饼的模具,将对象想象为小甜饼。由类构造(construct)对象的过程称为创建类的实例(instance)。 正如前面所看到的,用Java 编写的所有代码都位于某个类里面。 标准 Java 库提供了几千个类&a…...
口腔医院网站做优化/关键词分析
随着人工智能的发展,人脸识别技术在各个领域的场景应用中日益丰富,在多个场景可以看到人脸识别系统的应用落地,在社区、企业、工地、安防等方面。而现在随着各地智慧校园的建设,有些学校逐步引入人脸识别技术,通过校园…...
怎么利用网站做cpa推广/新站整站快速排名
什么是EDI? EDI(Electronic Data Interchange),即电子数据交换,帮助企业与交易伙伴传输业务数据,如,订单、发货通知、发票、物流信息等。较之传统的邮件及纸质单据方式,EDI更安全、…...
最早做淘宝客的网站/小程序
一、JDK源码的重要性JDK源码的重要性不言而喻,平时的面试、深入学习等都离不开JDK的源码。当然,JDK源码是非常优秀的代码,我们之所以阅读JDK源码,就是为了理解底层原理、学习优秀的设计模式和思想。不过JDK源码也是相当难啃的知识…...
做网站等保收费/怎么申请建立网站
[aligncenter][sizex-large][b][colorred] 在myeclipse配置subclipse插件,使用SVN服务器[/color][/b][/size][/align][colorgreen]项目管理软件:Subversion(SVN服务器客户端)下载[/color]:[url]http://subversion.apache.org/[/url][colorgre…...
广州设计网站/如何自己做网页
iOS开发 AudioServices(音效播放)的使用 AudioToolbox.framework是一套基于C语言的框架,使用它来播放音效其本质是将短音频注册到系统声音服务(System Sound Service).System Sound Service是一种简单、底层的声音播放服务,但是它本身也存在着一些限制: 音频播放时间不能超过3…...
软件开发工具都有哪些/seo关键词推广多少钱
0. 前言 在使用TensorFlow要明确下面的概念: 用图表示计算任务;在会话的上下文中执行图;数据用Tensor表示;变量用来维护状态;feed为操作赋值,fetch获取数据; TensorFlow的程序一般有如下2个阶…...