Python文件操作-代码案例

news2025/6/8 8:54:41

文章目录

    • 文件
      • 打开文件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+=1
    print(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 False
    return goal in s+s

print(rorateString("abcde","cdeab"))

#word[i]是否是s的前缀 startswith()
def countPrefixes(words: list,s: str):
    count=0
    for word in words:
        if s.startswith(word):
           count+=1
    return 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 Thread

soundlist=['sound/1.mp3','sound/2.mp3','sound/3.mp3']
count=0
def onRelease(key):
    '''
    这个函数,在用户释放键盘按键时就会被调用
    这个函数不是主动调用的,交给listener,由listener在用户释放按键的时候自动调用
    像这样不是自己主动调用,而是交给别人在合适的时机进行调用,这样的函数叫
    回调函数
    :param key:用户按下了哪个键
    :return:
    '''
    print(key)
    count +=1
    if 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 choice

def insert():
    print("新增学生开始")
    id=input('请输入学生的学号')
    name=input('请输入学生的姓名')
    gender=input('请输入性别')
    if  gender not in ('男','女'):
        print('性别不合理')
        return
    classname=input('请输入班级名称')
    #使用字典聚合
    student={
        'id':id,
        'name':name,
        'gender':gender,
        'classname':classname
    }
    global students
    students.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=0
    name=input('请输入要查找同学的姓名')
    for s in students:
        if name==s['name']:
            print(f"查找->[{s['id']}]\t[{s['name']}]]\t[{s['gender']}]\t[{s['classname']}]")
            count+=1
    print(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'):
        return
    global 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}')
                continue

            student={
                '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)
#

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/334493.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

十分钟上手把玩树莓派——系统创建指南

无意中发现一个落灰的树莓派 故事便开始了…… 准备工作 树莓派 3B一张大于 8G 的 micro SD 卡一个读卡器HDMI 显示器及连接线、键盘、鼠标等外围设备 系统镜像下载 推荐两个树莓派镜像下载网站 树莓派官方网站&#xff1a;https://www.raspberrypi.com/software/树莓派实…

“赶快回家网”首页制作

“赶快回家网”首页制作一、实验名称&#xff1a;二、实验日期&#xff1a;三、实验目的&#xff1a;四、实验内容&#xff1a;五、实验步骤&#xff1a;六、实验结果&#xff1a;七、源程序&#xff1a;八、心得体会&#xff1a;一、实验名称&#xff1a; “赶快回家网”首页…

使用Jmeter抓取手机APP报文并进行APP接口测试

Jmeter是一个比较常用的接口测试工具&#xff0c;尤其是接口性能测试。当然它也可以用来测试手机APP的HTTP接口&#xff0c;我在Fiddler抓取手机APP报文 和 接口测试代理工具charles mock测试 分别介绍了Fiddler和charles 如何抓取APP报文&#xff0c;本文介绍使用Jmeter来抓取…

第六章 关系数据理论(规范化详解)

第六章 关系数据理论 6.1 问题的提出 本章主要讨论关系数据理论。在讨论数据库的时候&#xff0c;绕不开的一个问题是&#xff1a;针对一个具体问题&#xff0c;应该如何构建一个适合他的数据库模式。这是数据库设计的问题&#xff0c;确切地讲是关系数据库逻辑设计的问题。为…

python最新采集某站美女,还不快学起来,下载可能下架视频

前言 大家早好、午好、晚好吖 ❤ ~ 这个页面大家认识吧~ 喜欢看吧 那我们今天就来采集一下它呀~ 开发环境: 版 本: python 3.8 编辑器: pycharm 2022.3.2 专业版 requests >>> pip install requests ffmpeg 音视频合成软件 如果安装python第三方模块: win R 输…

民用建筑电力系统运行和节能中的应用——电力监控系统篇

【摘要】本文中概述电力监控系统结构和作用&#xff0c;通过列举工程实例&#xff0c;详细介绍了电力监控系统在民用建筑电力系统运行和节能中的应用&#xff0c;以及在推广和发展方面需要改进的问题。 【关键词】民用建筑&#xff1b;电力监控系统&#xff1b;运行和节能中的…

cmd常用的操作命令

使用windows系统&#xff0c;通常在cmd中输入指令&#xff0c;会调用相应的一些程序或者执行一些功能&#xff0c;学会使用CMD中的命令&#xff0c;可以加快我们一些操作&#xff0c;省时省力。 ipconfig ------查询IP地址 gpedit.msc-----组策略 sndrec32-------录音机 Nsloo…

小程序自动化测试框架【Minium】系列(三)元素定位详解

元素定位 元素定位&#xff0c;应该是很多UI自动化测试入门学习必会的技能了&#xff0c;下面我将为大家举例演示元素定位的几种方法。 1、CSS选择器 Minium 可以通过 WXSS 选择器定位元素&#xff0c;如下图所示&#xff1a; 如果有[CSS选择器]基础会上手更快 &#xff0c;如…

Maven知识点-插件-maven-surefire-plugin简介

Maven本身并不是一个单元测试框架&#xff0c;Java 世界中主流的单元测试框架为JUnit 和TestNG。 Maven 所做的只是在构建执行到特定生命周期阶段的时候&#xff0c;通过插件来执行JUnit或者TestNG的测试用例。 这一插件就是maven-surefire-plugin&#xff0c;可以称之为测试…

Docker安装ElasticSearch,并进行ik和hanlp分词

我按装的目标: 利用ElastiSearch存储数据&#xff0c;ik和hanlp分词插件 对 搜索词进行分词&#xff0c;在ES存储的库中找到与搜索词相近的内容。 安装感受: 原始环境安装老版本的ES&#xff0c;BUG不断&#xff0c;ES相关解答博客对新手有点不友好&#xff0c;完整的解释不多&…

Elasticsearch7.8.0版本进阶——分布式集群(故障转移)

目录一、Elasticsearch集群的安装1.1、Elasticsearch集群的安装&#xff08;win10环境&#xff09;1.2、Elasticsearch集群的安装&#xff08;linux环境&#xff09;二、故障转移的概述三、故障转移&#xff08;win10环境集群演示&#xff09;一、Elasticsearch集群的安装 1.1…

分布式高级篇1 —— 全文检索

Elasticsearch Elasticsearch简介一、基本概念1、index(索引)2、Type(类型)3、Document(文档)4、倒排索引二、Docker 安装 EL1、拉取镜像2、创建实例三、初步探索1、_cat2、索引一个文档(保存)3、查询文档3、更新文档4、删除文档&索引5、_bulk 批量 AP6、样本测试数据四、进…

安全测试的最常用方法你知道多少呢?

安全性测试(Security Testing)是指有关验证应用程序的安全等级和识别潜在安全性缺陷的过程&#xff0c;其主要目的是查找软件自身程序设计中存在的安全隐患&#xff0c;并检查应用程序对非法侵入的防范能力&#xff0c;安全指标不同&#xff0c;测试策略也不同。 但安全是相对的…

【ESP32+freeRTOS学习笔记-(七)中断管理】

目录1、概述2、在ISR中使用FreeRTOS中专用的API2.1 独立的用于ISR中的API2.2 关于xHigherPriorityTaskWoken 参数的初步理解3、延迟中断处理的方法-将中断中的处理推迟到任务中去4 方法一&#xff1a;用二进制信号量来同步ISR与”延时处理的任务“4.1 二进制信号量4.2 函数用法…

高中生用台灯哪种好?2023最好的台灯品牌排行榜

高中生的学习时长是最长的&#xff0c;所以导致现在许多高中生都戴上了眼镜&#xff0c;主要是因为长时间对着书本&#xff0c;没有合理的让眼睛休息&#xff0c;导致眼疲劳&#xff0c;而选择护眼台灯是最好的&#xff0c;台灯内置的护眼技术是非常实用的&#xff0c;可以改善…

SIP协议的一键对讲终端

SIP对讲终端是一款采用了ARMDSP架构&#xff0c;接收网络音频流&#xff0c;实时解码播放&#xff1b;配置了麦克风输入和扬声器输出&#xff0c;作为网络数字广播的播放终端。主要用于银行、部门机构、酒店等场所的网络广播、网络对讲。本产品配置了麦克风和3W扬声器&#xff…

psudohash:一款基于变异机制的密码列表生成工具

关于psudohash psudohash是一款功能强大的密码列表生成工具&#xff0c;该工具基于关键词变异技术实现其功能&#xff0c;并且能够根据常用密码创建模式来生成字典文件。 psudohash可以用于密码爆破任务中&#xff0c;以帮助广大研究人员测试密码的安全性。该工具能够模仿人类…

Spring Security 源码解读:权限控制

本文样例代码地址&#xff1a; spring-security-oauth2.0-client-sample。 关于此章&#xff0c;官网介绍&#xff1a;Authorization 本文使用Spring Boot 2.7.4版本&#xff0c;对应Spring Security 5.7.3版本。 Introduction 认证过程中会一并获得用户权限&#xff0c;Au…

vue-router 源码解析(二)-创建路由匹配对象

文章目录基本使用导语createRouterMatcher 创建匹配路由记录addRoute 递归添加matchercreateRouteRecordMatcher 创建matchertokenizePath 解析pathtokensToParser 记录打分insertMatcher 将matcher排序总结基本使用 const routes [{path:"/",component: Demo2,nam…

爷青回!如果当年大学数据库实训选择了这款SQL工具,结局可能不一样

SQL语言逐渐成为职场人士必备的能力。很多人一直走上职场才了解什么是SQL&#xff0c;而更多人在大学就已经开始学习。 这些人一定对类似《数据库原理与应用》的课程不陌生。还记得你们是怎么熬过这门课的吗&#xff1f; 为什么说“熬”呢&#xff1f;实话说&#xff0c;数据库…