Python文件管理

news2025/3/17 20:18:18

目录

一、文本文件读写

1、相关函数

2、读写文件

3、使用readline读取一行

4、读写文件的异常处理

5、添加内容

二、文本文件的编码

1、常见的编码

2、Python程序的编码

3、指定编码

三、文件的路径

1、相对路径

2、绝对路径

3、路径的改变

四、文件夹操作

五、文件和递归函数的结合应用


在Python中,我们可以用代码来对文件进行读写,删除,创建等操作

一、文本文件读写

1、相关函数

在Python中,有很多函数可以对电脑中的文件进行操作:

函数功能
open()打开文件,并且会把返回值放到一个变量中,比如f
f.write()写入文件
f.readlines()读取文件的全部内容
f.readline读取文件的一行内容
f.close关闭文件(很重要)
f.read读取文件的全部内容,并且返回一个字符串,内部包含文件的全部内容

2、读写文件

下面我们来创建一个文件并在其中写入内容:

a = open("d:\\tmp\\t.txt" , "w")    #"w"表示写入,用这种方式打开文件,若文件本来就存在,就会被覆盖
a.write("hello\n")
a.write("world\n")
a.close()

在这个代码中,我们在d盘的tmp文件夹下创建了一个文本文档,在里面进行了写入的操作,下面我们到电脑中去查看一下:

我们发现,在tmp文件夹下,有了刚刚创建的文本文档,并且也有我们刚刚要求输入的内容

注意!在这个例子中,“w”模式下,对文本文档进行写入操作,tmp文件夹必须存在,否则程序会出现错误!

就像这样:

现在我们已经会了如何写入一个文件,下面我们来看如何读取一个文件的内容:

a = open("d:\\tmp\\t.txt" , "r")    #"r"表示读取
lines = a.readlines()    #lines是一个字符串列表,里面的每一个元素是一行
a.close()
for i in lines :
    print(i , end="")

输出:

在代码中,我们虽然在输出时添加了“end=""”,但是输出时还是带有换行,这是因为文本文档中每一行最后自带换行符,所以即使有end那一行的代码,输出也是换行的。

3、使用readline读取一行

我们也可以通过用while循环和readline函数来完成对文件的读取:

a = open("d:\\tmp\\t.txt" , "r")    #"r"表示读取
while True :
    data = a.readline()
    if data == "" :
        break

    data = data.strip()
    print(data)
a.close()

输出:

4、读写文件的异常处理

我们在用Python读写文件的时候,可能会因为文件不存在,而导致异常,而为了防止异常导致程序中断,我们可以结合try和except,来继续执行程序:

try :
    a = open ("d:\\study\\t.txt" , "r")
    lines = a.readlines()
    a.close()
    for i in lines :
        print(lines , end="")
except Exception as e :
    print(e)

我们要在D盘中打开study文件夹下的t.txt文件(但实际是不存在这个文件夹的),所以程序会执行

except后面的语句:

5、添加内容

在前面我们知道了,在“w”状态下,可以对某个文档进行写入操作,但如果这个文档之前存在,且里面有东西,里面的内容就会被覆盖,所以我们需要一个新的模式来能在不覆盖旧的内容的情况下,对文档进行写入操作,即“a”

a = open("d:\\tmp\\t.txt" , "a")
a.write("nihao\n")
a.write("Apple\n")
a.close()

当我们到文档中去查看的时候,发现文档下面多了两行,并且之前的文字没有被覆盖:

注意!在“a”模式下,如果文件不存在,就会创建一个文件,在文件内写入

二、文本文件的编码

1、常见的编码

我们常见的编码有两种,一个是gbk,另一个是utf-8,打开文件时,如果编码不正确,就不能正确的读取文件:

我们在另存文本文档时,会在下方看到默认的文件编码:

在上面的图片中,ANSI对应gbk

写入文件时,如果不指定编码,则用操作系统的缺省编码(默认编码)

(在Windows中是gbk,win10开始是utf-8,Linux和MacOS是utf-8)

2、Python程序的编码

在我们的电脑中,“.py”的文件必须保存成utf-8的编码格式,才能运行,如果存成了ANSI的编码格式,需要在文件的第一行加入:

#coding = gbk

3、指定编码

我们可以在写代码的时候就在里面直接指定读取写入文件的时候指定的编码:

并结合with语句:

with open("d:\\tmp\\t.txt", "w", encoding="utf-8") as a:
    a.write("你好\n")
    a.write("你好\n")

三、文件的路径

在我们电脑中,路径可以分为绝对路径和相对路径,相对路径的形式就是文件名没有包含盘符而绝对路径的文件名就是包含盘符的

1、相对路径

相对路径不包含盘符,所以它的目录就是会默认在当前文件夹下,按照给的路径往下遍历:

这是一些相对路径的例子:

open("test.txt" , "r")
#文件在当前文件夹下
open("tmp\\test.txt" , "r")
#文件在当前文件夹下的tmp文件夹里
open("test\\tmp\\test.txt" , "r")
#文件在当前文件夹下的test文件夹下的tmp文件夹里面
open("..\\test.txt" , "r")
#文件在当前文件夹的上一层文件夹中
open("..\\..\\test.txt" , "r")
#文件在当前文件夹的上一层文件夹的上一层文件夹中
open("/tmp\\test.txt" , "r")
#文件在当前盘符的根目录下的tmp文件夹下

2、绝对路径

绝对路径就是包含盘符的,就上之前我们代码中的例子一样:

a = open("d:\\tmp\\t.txt" , "w")

(路径path也叫文件夹folder,或者目录directory)

注:

①运行程序时,会有一个“当前文件夹”,open一个文件的时候,如果不是绝对路径的形式,就都是相对与这个“当前文件夹”的

②而我们上面提到的这个“当前文件夹”,就是我们运行代码的py文件所在的文件夹

③程序是可以获取当前的文件夹的(需调用os模块)

例子:

import os
print(os.getcwd())  #os.getcwd()用于获取当前的文件夹

3、路径的改变

我们可以在程序的运行期间改变当前文件夹,这里需要调用os模块和一个函数

例子:

import os
print(os.getcwd())  #os.getcwd()用于获取当前的文件夹
os.chdir("d:\\Cplusplus")
print(os.getcwd())

输出:

四、文件夹操作

Python中为我们提供了丰富的函数来操作文件夹:

函数作用
os.chdir(x)将程序的当前文件夹设置成x
os.getcwd()求程序的当前文件夹
os.listdir(x)返回一个列表,里面是文件夹x中所有的子文件夹名字和文件名字
os.mkdir(x)创建文件夹x
os.path.getsize(x)获取文件夹x的大小(单位:字节)
os.path.isfile(x)判断x是不是文件
os.remove(x)删除文件x
os.rmdir(x)删除文件夹x,x文件夹必须是空文件夹才能成功
os.rename(x,y)将文件夹或文件x改名为y,不但可以改名,还可以起到移动文件夹或文件的目的
shutil.copyfile(x,y)拷贝文件x到文件y若y本来就存在,就会被覆盖

五、文件和递归函数的结合应用

在上面的表格提到了,我们在删除文件夹的时候,该文件夹必须是空的才彳亍,所以我们现在要设计一个函数,先删除内部可能包含的文件,然后把文件夹变成空的再删除空文件夹:

import os

def DeleteProMax(path) :
    lst = os.listdir(path)  #将路径中的子文件夹和文件的名字返回成一个列表
    for i in lst :
        lujing = path + "/" + i     #i不包括我们输入的路径
        if os.path.isfile(lujing):
            os.remove(lujing)
        else :
            DeleteProMax(lujing)
    os.rmdir(path)

DeleteProMax("d://tmp")

例子2:

用递归函数获取文件夹的大小:

import os
def GetSizeTool(path) :
    total = 0
    lst = os.listdir(path)
    for i in lst :
        lujing = path + "/" + i
        if os.path.isfile(lujing) :
            total += os.path.getsize(lujing)
        else :
            total += GetSizeTool(lujing)
    return total

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

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

相关文章

vue3 前端路由权限控制与字典数据缓存实践(附Demo)

目录 前言1. 基本知识2. Demo3. 实战 前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 从实战中出发: 1. 基本知识 Vue3 和 Java 通信时如何进行字典数据管理 需要了解字典数据的结构。通常&#x…

基于javaweb的SpringBoot精美物流管理系统设计与实现(源码+文档+部署讲解)

技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…

DeepSeek进阶应用(二):结合Kimi制作PPT(双AI协作教程)

🌟引言: DeepSeek作为国产AI大模型,以强大的逻辑推理和结构化内容生成能力著称,擅长根据用户需求生成PPT大纲或Markdown文本;Kimi的PPT助手则能解析结构化内容并套用模板快速生成美观的PPT,两者结合实现“内…

SpringBoot——Maven篇

Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的工具。它具有许多特性,其中一些重要的特性包括: 1. 自动配置:Spring Boot 提供了自动配置的机制,可以根据应用程序的依赖和环境自动配置应用程序的各种组件&#xff…

卷积神经网络(知识点)

一、为了使特征图变小: 由两种方法:1.增大步长:卷积的时候不是一次一步,而是一次多步,类似一张图片,在原来的像素基础上,每隔一个取一个像素点。 其中S就是步长 注意:扩大步长不经…

Vision Transformer (ViT):将Transformer带入计算机视觉的革命性尝试(代码实现)

Vision Transformer (ViT):将Transformer带入计算机视觉的革命性尝试 作为一名深度学习研究者,如果你对自然语言处理(NLP)领域的Transformer架构了如指掌,那么你一定不会对它在序列建模中的强大能力感到陌生。然而&am…

特殊 IP 地址

文章目录 特殊IP地址概述受限广播地址(Limited Broadcast Address)直接广播地址(Directed Broadcast Address)多播地址(Multicast Address)环回地址(Loopback Address)本网络本主机&…

数学——A. K-divisible Sum + D. Exam in MAC

A. K-divisible Sum 题目: 思路: 以下 “[xxx]” 符号均代表向上取整 我们假设总和是sum,那么就有sum k * cnt 要想最大值最小,肯定是要让sum尽可能小,这样每个元素都能变小 最小情况是 sum 恰好等于 n 时&#…

【DeepSeek应用】本地部署deepseek模型后,如何在vscode中调用该模型进行代码撰写,检视和优化?

若已成功在本地部署了 DeepSeek 模型(例如通过 vscode-llm、ollama 或私有 API 服务),在 VS Code 中调用本地模型进行代码撰写、检视和优化的完整流程如下: 1. 准备工作:确认本地模型服务状态 模型服务类型: 若使用 HTTP API 服务(如 FastAPI/Flask 封装),假设服务地址…

网络编程、URI和URL的区别、TCP/IP协议、IP和端口、URLConnection

DAY12.1 Java核心基础 网络编程 在互联网时代,网络在生活中处处可见,javaWeb占据了很大一部分 那如何实现javaWeb编程呢? Web编程就是运行在同一个网络下面的终端,使得它们之间可以进行数据传输 计算机网络基本知识 计算机网络…

自探索大语言模型微调(一)

一、数据 1.1、失败案例 Hugging Face: 根据B站上搜索到的资料,datasets这个库可以直接下载丰富的数据集合和与训练模型,调用也非常的简单,唯一的缺点就是,需要外网(翻墙),用国内的…

Unity 和 Python 的连接(通过SocketIO)附源码

在游戏或者项目开发中,Unity 通常用于创建前端,而 Python 则因其强大的数据处理能力常被用作后端。通过 Socket.IO,我们可以轻松地实现 Unity 和 Python 的实时通信。本文将介绍如何通过 Socket.IO 连接 Unity 和 Python,并附上完…

89.HarmonyOS NEXT 应用安全与隐私保护指南:构建安全可靠的应用

温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦! HarmonyOS NEXT 应用安全与隐私保护指南:构建安全可靠的应用 文章目录 HarmonyOS NEXT 应用安全与隐私保护指南:构建安全可…

spring boot 发送邮件验证码

一、前置需求 1、准备邮箱 2、登录授权码 qq邮箱在–>设置–>账号POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 开启服务 二、发送邮件 1、简单邮件 包含邮件标题、邮件正文 2、引入mail启动器 <dependency><groupId>org.springframework.boot</groupI…

MySQL连接较慢原因分析及解决措施

文章目录 整体说明一、问题现象二、问题分析2.1、DNS反向解析问题2.2、网络问题2.3、SSL/TLS协商问题2.4、自动补全的延迟 三、问题解决 摘要&#xff1a; MySQL连接较慢原因分析及解决措施 关键词&#xff1a; MySQL、连接缓慢、客户端、参数设置 整体说明 在使用MySQL的时候…

【大模型基础_毛玉仁】2.5 基于 Decoder-only 架构的大语言模型 -- GPT和LLaMa模型介绍

更多内容&#xff1a;XiaoJ的知识星球 目录 2.5 基于 Decoder-only 架构的大语言模型2.5.1 Decoder-only 架构2.5.2 GPT 系列语言模型1&#xff09;初出茅庐&#xff1a;GPT-1 模型2&#xff09;小有所成&#xff1a;GPT-2 模型3&#xff09;崭露头角&#xff1a;GPT-3 模型4&a…

如何解决ChatGPTplus/pro o1/o3模型无法识别图片或者文件,限制次数?

你是否遇到ChatGPTplus无法识别图片、或者无法识别文件&#xff0c;甚至回答很简短&#xff0c;o1不思考&#xff0c;GPT-4o不能联网、分析图片和处理文件&#xff01;感觉非常敷衍。本文教你如何确定自己的账号是否被降智&#xff1b;教你如何降智的原因&#xff1b;教你解决降…

go的gmp

参考链接&#xff1a;https://www.bilibili.com/video/BV19r4y1w7Nx Golang的GMP调度模型(协程调度器)是其并发编程的核心。GMP代表Goroutine、Machine和Processor三个关键组成部分。Goroutine是Go语言中的轻量级线程&#xff0c;Machine是操作系统的线程&#xff0c;Processor…

Vue开发者工具(VueDevtools)下载与安装

一、这里采用极简插件 网址&#xff1a;chrome.zzzmh.cn/index#/inde… 输入 vue.js.devtools并访问 点击推荐下载 下载到本地解压缩 然后把这个文件移动到谷歌插件里面,开启开发者模式 点击详情,开启一些权限 写的一个demo&#xff0c;如果有vue代码的话&#xff0c;就会…

【Linux】https 协议

目录 一、https 协议 二、加密和解密 &#xff08;一&#xff09;为什么需要加密与解密 &#xff08;二&#xff09;加密和解密的过程 &#xff08;二&#xff09;常见的加密方式 1、对称加密 2、非对称加密 3、数据摘要 4、数字签名 三、https 的加密方式 &#xff…