Python基础08-文件操作详解

零、文章目录

Python基础08-文件操作详解

1、文件操作概述

(1)文件是什么
  • 内存中存放的数据在计算机关机后就会消失。要长久保存数据,就要使用硬盘、光盘、U 盘等设备。为了便于数据的管理和检索,引入了**“文件”**的概念。

  • 一篇文章、一段视频、一个可执行程序,都可以被保存为一个文件,并赋予一个文件名。操作系统以文件为单位管理磁盘中的数据。一般来说,==文件可分为文本文件、视频文件、音频文件、图像文件、可执行文件等多种类别。

image-20231120154443232

(2)文件有哪些操作
  • 在日常生活中,文件操作主要包括打开、关闭、读、写、备份等操作。
(3)文件操作的作用
  • 文件操作的作用就是把一些内容(数据)存储存放起来,可以让程序下一次执行的时候直接使用,而不必重新制作一份,省时省力。
  • 简单来说就是实现数据的持久化保存!

2、文件的基本操作

(1)文件的操作步骤
  • ① 打开文件
  • ② 读写文件
  • ③ 关闭文件
(2)open()打开函数
  • 在Python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件,语法:open(name, mode)

    • name:是要打开的目标文件名的字符串(可以包含文件所在的具体路径)。
    • mode:设置打开文件的模式(访问模式):只读、写入、追加等。
  • 文件路径:① 绝对路径 ② 相对路径

    • ① 绝对路径:绝对路径表示绝对概念,一般都是从盘符开始,然后一级一级向下查找(不能越级),直到找到我们要访问的文件即可。
    • ② 相对路径:相对路径表示相对概念,不需要从盘符开始,首先需要找到一个参考点(就是Python文件本身)
      • 同级关系:我们要访问的文件与Python代码处于同一个目录,平行关系,同级关系的访问可以使用./文件名称或者直接写文件名称即可
      • 上级关系:如果我们要访问的文件在当前Python代码的上一级目录,则我们可以通过../来访问上一级路径(如果是多级,也可以通过…/…/…/去一层一层向上访问
      • 下级关系:如果我们要访问的文件在与Python代码同级的某个文件夹中,则我们可以通过文件夹名称/来访问某个目录下的文件
(3)mode访问模式详解

image-20231120162401489

(4)写操作快速入门
'''
文件操作三步走:① 打开文件 ② 读写文件 ③ 关闭文件
① 打开文件 => open(name, mode)
name = 代表要打开的文件路径 + 名称
mode代表访问模式,只需要记住三种模式即可 => r/w/a
r : read,只读模式,代表只能对文件进行读取,属于默认模式,如果要访问的文件不存在,则直接报错!
w : write,只写模式,代表只能对文件进行写入操作,如果访问的文件不存在,则系统会自动创建,但是写入文件时,
它首先要把文件内容清空,然后再写入新内容。
a : append,追加模式(只写模式的一种),与w类似,如果访问的文件不存在,也可以自动创建该文件。
但是在写入数据到文件时,其并不会清空文件的原有内容。
注意:open方法操作完成后,返回的是一个文件对象(对象的概念后面会学,也可以叫做文件句柄)
以后的读写都需要依赖这个对象(句柄)
② 写内容到文件 => f.write(content) => f.write()只能把字符串类型的数据写入到文件中
③ 关闭文件(为什么要关闭文件 => 因为文件打开以后需要占用计算机资源)
f.close()
'''
# 1、打开文件
f = open('python.txt', 'w')
# 2、写入内容到文件
f.write('Life is Short, I Study Python!')
# 3、关闭文件
f.close()
(4)解决写入中文乱码问题
  • open的时候指定字符集encoding=‘utf-8’,可以让程序按照指定的字符集读写。
'''
乱码是如何产生的?把这个原因说清楚!
大多数编程语言都是老外开发的,对中文的支持并不好。最早美国搞出了一套编码格式 => ASCII => 1字节 => 8bit
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
2的8次方 => 主要能表达255个字符(主要包括了0-9,a-z,A-Z,老外字符)
随着编程语言和互联网发展,语言传入国内了,发现255个字符根本装不了汉字。所以就会产生所谓的乱码!
中国推出了自己的编码格式 => GB2312 => 比较广,传统255个字符 + 汉字支持 => GBK
中国台湾 => 喜欢使用繁体中文 => Big5
国际化组织受不了,每开一个系统,兼容所有语言 => 开发好几套系统 => 编码标准unicode => UTF-8
'''
# 1、打开文件
f = open('python.txt', 'w', encoding='utf-8')
# 2、写入内容到文件
f.write('人生苦短,我学Python!')
# 3、关闭文件
f.close()
(5)读操作相关方法
  • read() : 读取文件的所有内容,可以添加一个参数size,代表读取字符长度,如果没有传入num,那么就表示读取文件中所有的数据。
  • readlines() : 一次性读取文件的所有内容,返回结果是一个列表,列表中的每一个元素都是文件中的一行
  • readline() : 一次读取文件的一行,读取一次向后移动一次,直到文件读取完毕,很少自己使用,通常要配合while
'''
文件读取也要分为三步走:
① 打开文件 f = open()
② 读取文件
③ 关闭文件 f.close()
在Python代码中,文件读取一共有3种方法:
read() : 读取文件的所有内容,可以添加一个参数size,代表读取字符长度
readlines() : 一次性读取文件的所有内容,返回结果是一个列表,列表中的每一个元素都是文件中的一行
readline() : 一次读取文件的一行,读取一次向后移动一次,直到文件读取完毕,很少自己使用,通常要配合while True
'''
# 1、第一种方法
# f = open('python.txt', 'r', encoding='utf-8')
# # content = f.read()  # 读取文件所有内容
# content = f.read(1)   # 代表只读取文件中的一个字符
# print(content)
# f.close()

# 2、第二种写法
# f = open('python.txt', 'r', encoding='utf-8')
# content = f.readlines()
# print(content)
# f.close()

# 3、第三种写法
f = open('python.txt', 'r', encoding='utf-8')
while True:
    content = f.readline()
    # 判断,如果读取不到任何内容,则结束循环
    if not content:
        break
    # 反之,如果没有执行break,则代表文件中还有内容
    print(content, end='')

print(content)
f.close()
(6)文件备份案例
  • 需求:用户输入当前目录下任意文件名,完成对该文件的备份功能(备份文件名为xx[备份]后缀,例如:test[备份].txt)。
'''
需求:用户输入当前目录下任意文件名,完成对该文件的备份功能(备份文件名为xx[备份]后缀,例如:(test[备份].txt)。
① 命名变化:test.txt => 备份 => test[备份].txt
② 内容变化:需要把旧文件中的内容完全拷贝到新文件中
分析:命名变化如何实现
test.txt => test[备份].txt?
☆ 提示用户输入要备份的文件名称
☆ 分别获取文件的名称以及文件的后缀 => (文件名 => test 后缀 => .txt)
☆ 重新拼接新文件 test + [备份] + .txt
新方法:rfind()方法,从左向右查找,返回这个关键词在最后一次出现的位置
test.abc.txt

分析:文件内容变化
旧文件 => 读取操作
新文件 => 写入操作
把旧文件的内容全部读取出来写入到新文件中,但是文件如果比较大,考虑使用read或readline
'''
oldname = input('请输入您要备份的文件名称:')
# oldname = 'test.txt',拆解文件名与文件的后缀
index = oldname.rfind('.')
# 获取文件名称
filename = oldname[:index]  # test
postfix = oldname[index:]   # .txt
# 拼接新文件名称
newname = filename + '[备份]' + postfix

# 创建old_f文件句柄与new_f文件句柄
old_f = open(oldname, 'rb')
new_f = open(newname, 'wb')
while True:
    content = old_f.read(1024)  # r模式size代表字符长度,rb模式size代表字节大小 => 1KB
    if not content:
        break
    new_f.write(content)
# 操作完成后,关闭文件
old_f.close()
new_f.close()

3、文件和文件夹操作

(1)os模块
  • 在Python中文件和文件夹的操作要借助os模块里面的相关功能,具体步骤如下:
  • ① 导入os模块
import os
  • ② 还用os模块的相关功能
os.函数()
(2)与文件操作相关方法
  • os.rename(旧文件名称,新文件名称):对文件进行重命名操作
  • os.remove(要删除文件名称):对文件进行删除操作
'''
os.rename(旧文件名称, 新文件名称)
os.remove('要删除的文件名称')

案例:把Python项目目录下的python.txt文件,更名为linux.txt,查看效果后,对文件进行删除操作。
'''
# 1、导入os模块
import os

# 2、对python.txt重命名为linux.txt
if os.path.exists('python.txt'):
    os.rename('python.txt', 'linux.txt')

# 3、把linux.txt移除
os.remove('linux.txt')
(3)与文件夹操作相关方法
  • os.mkdir(新文件夹名称) :创建一个指定名称的文件夹
  • os.getcwd() :current work directory,获取当前目录名称
  • os.chdir(切换后目录名称) :change directory,切换目录
  • os.listdir(目标目录) :获取指定目录下的文件信息,返回列表
  • os.rmdir(目标目录) :用于删除一个指定名称的"空"文件夹
'''
import os模块

os.mkdir() 创建一个文件夹
os.getcwd() 获取当前程序工作目录
os.chdir()  =>  change directory,切换目录
os.listdir() => list directory,以列表形式展现一个目录下的所有文件信息
os.rmdir()  =>  remove directory,移除目录(删除文件夹,缺点:只能删除空文件夹)

案例:准备一个static文件夹以及file1.txt、file2.txt、file3.txt三个文件
① 在程序中,将当前目录切换到static文件夹
② 创建一个新images文件夹以及test文件夹
③ 获取目录下的所有文件
④ 移除test文件夹
'''
import os

# 1、我目前在什么位置
print(os.getcwd())
# 2、把当前工作目录切换到static文件夹
os.chdir('static')
# 3、创建images与test文件夹
if not os.path.exists('images'):
    os.mkdir('images')
if not os.path.exists('test'):
    os.mkdir('test')
# 4、获取一个目录下的所有文件
files = os.listdir()
print(files)
# 5、删除目录
if os.path.exists('test'):
    os.rmdir('test')
(4)递归删除非空目录(慎重)
'''
Ctrl + 鼠标左键点击一下模块,可以打开模块底层代码
'''
import shutil

shutil.rmtree('static')

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【普中】基于51单片机简易计算器显示设计( proteus仿真+程序+设计报告+实物演示+讲解视频)

目录标题 📟1. 主要功能:📟2. 讲解视频:📟3. 设计说明书(报告)📟4. 仿真📟5. 实物烧录和现象📟6. 程序代码📟7. 设计资料内容清单 【普中开发板】基于51单片机简易计算器…

nodejs+vue+微信小程序+python+PHP校园二手交易系统的设计与实现-计算机毕业设计推荐

(2)管理员 进行维护,以及平台的后台管理工作都依靠管理员,其可以对信息进行管理。需具备功能有;首页、个人中心、学生管理、物品分类管理、物品信息管理、心愿贴、系统管理、订单管理等功能。系统分成管理员控制模块和学生模块。 本系统有良好…

Source Insight使用

之前一直使用VS code阅读kernel源码,有时候函数跳转有些问题。最近换成了Source Insight软件,发现真不错。就是需要一些学习成本,简单记录一下如何使用吧。 1、下载安装: 首先肯定是要下载安装,这个就不写了&#xf…

Restrict Content Pro WordPress – 限制会员内容 付费内容网站(包含所有扩展)

Restrict Content Pro WordPress限制会员内容专业插件 强大的内容限制工具和强大的 WordPress 会员网站,都在一个易于管理的插件中。 购买Restrict Content Pro 最新版本并加入超过23000 名快乐客户的俱乐部。 使用 Restrict Content Pro 插件将您的独家内容锁定…

oracle怎么导入dmp文件??????

目录 oracle怎么导入dmp文件?????? 先看: 方法一:【推荐】 winR输入 输入: 检验: 导入成功! 方法二: 直接在 PLSQL Developer…

Python计算圆的面积,几何学技法大解析!

更多Python学习内容:ipengtao.com 大家好,我是彭涛,今天为大家分享 Python计算圆的面积,几何学技法大解析,全文3800字,阅读大约15分钟。 在本文中,将深入探讨如何使用 Python 计算圆的面积&…

如何使用MySQL Workbench将样本数据库导入到MySQL数据库服务器

如何使用MySQL Workbench将样本数据库导入到MySQL数据库服务器 摘要:在本教程中,您将学习如何使用MySQL Workbench将MySQL样本数据库加载到MySQL数据库服务器。之后,您将有classicmodels示例数据库以方便练习和学习MySQL。 步骤1. 下载class…

vue-cli创建一个vue3项目

通过命令创建VUE脚手架: npm install -g vue/cli 创建VUE项目: vue create npg***b 剩下的就是一路回车 npm install element-plus --save 入口文件main.ts import { createApp } from vue import App from ./App.vue import router from ./router…

Go环境安装

目录 下载地址 安装 macos环境 window及其他环境 GOPROXY 非常重要 Go开发编辑器 下载地址 Go官网下载地址:https://golang.org/dl/ Go官方镜像站(推荐):https://golang.google.cn/dl/ 选择要下载的系统版本: 安装 注意…

“华为杯” 第二十届中国研究生数学建模竞赛 数模之星、华为之夜与颁奖大会

文章目录 一、前言二、主要内容三、总结 🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一、前言 不以物喜,不以己悲。见众生,见自己。 作为荣获一等奖的学生代表,我有幸参加了 “华为杯” 第二十届中国研究生数学…

排序-归并排序与计数排序

文章目录 一、归并排序1、概念2、过程3、代码实现4、复杂度5、稳定性 二、 计数排序1、思路2、代码实现3、复杂度:4、稳定性 一、归并排序 1、概念 是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已…

Shell三剑客:正则表达式(元字符)

一、定义:元字符字符是这样一类字符,它们表达的是不同字面本身的含义 二、分类: 1、基本正则表达式元字符 # ^ 行首定位 [rootlocalhost ~]# grep root /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/…

分布式块存储 ZBS 的自主研发之旅|元数据管理

重点内容 元数据管理十分重要,犹如整个存储系统的“大黄页”,如果元数据操作出现性能瓶颈,将严重影响存储系统的整体性能。如何提升元数据处理速度与高可用是元数据管理的挑战之一。SmartX 分布式存储 ZBS 采用 Log Replication 的机制&…

The Grid – Responsive WordPress Grid响应式网格插件

点击阅读The Grid – Responsive WordPress Grid响应式网格插件原文 The Grid – Responsive WordPress Grid响应式网格插件是一个高级 wordpress 网格插件,它允许您在完全可定制且响应迅速的网格系统中展示任何自定义帖子类型。 Grid WordPress 非常适合展示您的博…

信号与线性系统预备训练3——MATLAB软件在信号与系统中的应用初步

信号与线性系统预备训练3——MATLAB软件在信号与系统中的应用初步 The Preparatory training3 of Signals and Linear Systems 对应教材:《信号与线性系统分析(第五版)》高等教育出版社,吴大正著 一、目的 1.熟悉和回顾MATLAB…

Android动画

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。 目录 一、导读二、概览三、动画实现3.1 帧动画资源文件中实现…

会声会影2024中文旗舰版强悍来袭及视频片头怎么制作

​ 随着网络视频的蓬勃发展,越来越多的人开始涉足视频剪辑领域,毕竟技多不压身嘛。在众多剪辑软件中,剪映和会声会影是备受新手青睐的两种。那么,会声会影2024出来了吗? 会声会影2024中文旗舰版是一款加拿大公司Corel发…

cpp_03_引用_类型转换_温和强转_面向对象

1 引用的应用 1.1 数据传递--值传递 C语言只要涉及数据传递(例如:初始化、赋值、传参、返回值), 都为值传递(将数据复制一份给到目标内存)。 // value.cpp 值传递:将数据复制一份给别人 #in…

C++软件调试与异常排查技术从入门到精通学习路线分享

目录 1、概述 2、全面了解引发C软件异常的常见原因 3、熟练掌握排查C软件异常的常见手段与方法 3.1、IDE调试 3.2、添加打印日志 3.3、分块注释代码 3.4、数据断点 3.5、历史版本比对法 3.6、Windbg静态分析与动态调试 3.7、使用IDA查看汇编代码 3.8、使用常用工具分…

正大杯获奖作品在哪可以看见

通过网盘分享的文件:2023年第十三届正大杯最新国家一等奖完整获奖作品报告等全套资料 链接:https://pan.baidu.com/s/1SPA4LumSCI4BZdCRXXnW6Q?pwdc8bj 提取码:c8bj 2023年第十三届最新正大杯国家一等奖完整获奖作品等全套资料获取方式链接https://ex59573j43x.fe…