当前位置: 首页 > news >正文

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}')

image-20230105123727233

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}")

程序员鼓励师

每间隔一段时间就让电脑发出声音鼓励一下:

  1. 播出声音~playsound第三方库

  2. 监听键盘按键,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管理中面临许多挑战&#xff0c;尤其是在管理Active Directory用户帐户方面。手动配置用户属性非常耗时、令人厌烦且容易出错&#xff0c;尤其是在大型、复杂的 Windows 网络中。Active Directory管理员和IT经理大多必须执行重复和世俗…...

Allegro如何使用Vertext命令修改丝印线段的形状操作指导

Allegro如何使用Vertext命令修改丝印线段的形状操作指导 在用Allegro画丝印线段的时候,如果画了一段不是自己需要形状的线段,无需删除重画,可以用Vertext命令直接编辑 如下图 修改前 修改后 具体操作如下 选择Edit...

Leetcode力扣秋招刷题路-0030

从0开始的秋招刷题路&#xff0c;记录下所刷每道题的题解&#xff0c;帮助自己回顾总结 30. 串联所有单词的子串 给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。 s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。…...

基于Prometheus和k8s搭建监控系统

文章目录1、实验环境2、Prometheus介绍&#xff1f;3、Prometheus特点3.1 样本4、Prometheus组件介绍5、Prometheus和zabbix对比分析6、Prometheus的几种部署模式6.1 基本高可用模式6.2 基本高可用远程存储6.3 基本HA 远程存储 联邦集群方案7、Prometheus的四种数据类型7.1 C…...

类和对象(下)

类和对象&#xff08;下&#xff09;再谈构造函数构造函数体赋值初始化列表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 通信协议桥接&#xff0c;主芯片的视频数据可通过 DSI 链路流 出&#xff0c;以驱动兼容 LVDS 的显示板。换句话说&#x…...

Linux---Kernal与Shell讲解

目录 Shell简介 什么是Shell Shell分类 内核Kernal Shell简介 什么是Shell 我们首先需要知道一台完整的计算机是由硬件组成的&#xff0c;而人不可以直接与硬件交互&#xff0c;为了完成交互&#xff0c;进行了以下的操作 将硬件设备交由内核管理&#xff0c;给硬件套个内…...

Thiol-PEG-Acid,HS-PEG-COOH,巯基-聚乙二醇-羧基试剂供应

一&#xff1a;产品描述 1、名称 英文&#xff1a;HS-PEG-COOH&#xff0c;Thiol-PEG-Acid 中文&#xff1a;巯基-聚乙二醇-羧基 2、CAS编号&#xff1a;N/A 3、所属分类&#xff1a;Carboxylic acid PEG Thiol PEG 4、分子量&#xff1a;可定制&#xff0c;Thiol-聚乙二…...

数据结构与算法基础-学习-09-线性表之栈的理解、初始化顺序栈、判断顺序栈空、获取顺序栈长度的实现

一、个人理解栈是线性表的一种衍生&#xff0c;和之前的顺序表和链表在插入和删除元素上有较大差异&#xff0c;其他基本相同&#xff0c;栈是数据只能插入表的尾部&#xff08;栈顶&#xff09;&#xff0c;删除数据时只能删除表的尾部&#xff08;栈顶&#xff09;数据&#…...

深入Kafka核心设计与实践原理读书笔记第二章

1 生产者 生产逻辑 配置生产者客户端参数及创建相应的生产者实例。构建待发送的消息。发送消息关闭实列 参数说明 bootstrap.servers &#xff1a;用来指定生产者客户端链接Kafka集群搜需要的broker地址清单&#xff0c;具体格式 host1:port1,host2:port2,可以设置一个或多…...

知乎kol投放怎么做?知乎kol资源从哪里找?

每个领域都有一些比较专业且具有话语权的大V博主&#xff0c;他们推荐某个产品或是品牌就能对粉丝产生很深的影响力&#xff0c;影响用户消费决策。 互联网时代&#xff0c;每个热门的内容平台上都活跃着一大批kol博主&#xff0c;做kol投放具有很高的商业价值。 知乎内容社区…...

python设计模式-享元设计模式,抽象工厂设计模式,面向对象设计模式

享元设计模式 享元(flyweight)设计模式属于结构设计模式类别。 它提供了一种减少对象数的方法。 它包含各种有助于改进应用程序结构的功能。享元对象最重要的特性是不可变的。 这意味着一旦构建就不能修改它们。 该模式使用HashMap来存储引用对象 如何实现享元(flyweight)设计…...

10条终身受益的Salesforce职业发展建议!

Salesforce这个千亿美金巨兽&#xff0c;在全球范围内有42,000多名员工。作为一家发展迅速的科技公司&#xff0c;一直在招聘各种角色&#xff0c;包括销售、营销、工程师和管理人员等。 据IDC估计&#xff0c;从2016年到2020年&#xff0c;该生态系统创造了190万个工作岗位。…...

电子科技大学人工智能期末复习笔记(四):概率与贝叶斯网络

目录 前言 概率 概率公式 贝叶斯公式 链式条件概率 例题 1. 求联合概率分布/边缘概率分布/条件概率分布 2. 灵活运用贝叶斯公式 概率总结 贝叶斯网络 判断独立性 两个事件独立的判断 条件独立性的判断 假设条件独立的链式法则 ⚠Active / Inactive Paths 判断独…...

码上掘金实现电子木鱼

前言 前几天在朋友圈看到“敲电子木鱼”的视频&#xff0c;敲一下木鱼就提示“功德 1”&#xff0c;还带有敲击声和念经的声音&#xff0c;感觉挺有意思的。 心血来潮&#xff0c;捣鼓了一晚上&#xff0c;借助码上掘金实现了这个功能。 展示效果 素材 准备素材如下&#…...

深度学习_L2正则化

文章目录参考博客正则化介绍正则化的实现参考博客 深入理解L1、L2正则化 PyTorch 实现L2正则化以及Dropout的操作 正则化介绍 正则化&#xff08;Regularization&#xff09;是机器学习中一种常用的技术&#xff0c;其主要目的是控制模型复杂度&#xff0c;减小过拟合。最基…...

第一章 认识Python

本章目录 一、初识Python 二、Python环境安装 三、Python代码的执行 四、Python集成开发环境 五、Python2.x与Python3.x的区别 六、本章小结 Python代码的编辑和运行方式主要分为两种&#xff1a;交互模式和脚本模式。 在交互模式下&#xff0c; 用户输入Python代码并按…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !

我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...

云原生安全实战:API网关Envoy的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口&#xff0c;负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...

深入解析 ReentrantLock:原理、公平锁与非公平锁的较量

ReentrantLock 是 Java 中 java.util.concurrent.locks 包下的一个重要类,用于实现线程同步,支持可重入性,并且可以选择公平锁或非公平锁的实现方式。下面将详细介绍 ReentrantLock 的实现原理以及公平锁和非公平锁的区别。 ReentrantLock 实现原理 基本架构 ReentrantLo…...