Python学习笔记-文件及文件夹操作

news2024/11/24 3:27:50

记述python中关于文件和目录的基本操作。

一、基本文件操作

1.文件的创建和打开

file = open(filename[,mode[,buffering]])
  • file:文件对象
  • filename:文件路径,字符串类型,若要打开的文件与程序文件在同一文件夹,可直接写名即可
  • mode:可选参数,用来指定文件打开模式,默认为只读模式(r)
  • buffering:可选参数,用于只当独写文件的缓存模式,0-不缓存,1-缓存;>1-表示缓存去的大小,默认为缓存模式。
mode参数值
说明备注
r只读模式,文件指针放在文件开头文件不存在时会报错
rb只读模式读取二进制格式文件,文件指针指向开头

文件不存在时会报错

一般用来读取图片、声音等非文本文件

r+打开文件后读取文件内容,亦可从头开始覆盖原有内容,指针放在文件开头文件不存在时会报错
rb+读写模式、二进制格式打开文件,文件指针放在开头

文件不存在时会报错

一般用来读取图片、声音等非文本文件

w只写模式文件存在时覆盖,否则创建新文件。
wb只写模式、二进制格式打开文件
w+打开并清空原有文件,然后进行读写
wb+二进制格式打开文件,然后进行读写
a

添加模式打开文件。

文件存在时,指针放在文件末尾;

文件不存在时,创建文件用于写入;

ab

添加模式,以二进制格式打开文件;

文件存在时,指针放在文件末尾;

文件不存在时,创建文件用于写入;

a+

读写模式打开。

文件存在时,指针放在文件末尾;

文件不存在时,创建文件用于写入;

ab+

添加模式,以二进制格式打开文件;

文件存在时,指针放在文件末尾;

文件不存在时,创建文件用于写入;

1.1 打开一个不存在的文件时先创建该文件

使用open()打开文件。mode配置为w、w+、a、a+模式,文件不存在时直接创建。

示例1 文件不存在时直接报错

# _*_ coding:utf-8 _*_


file = open("new file.txt")
    
print(file)

结果:

========================== RESTART: D:\Desktop\Demo.py =========================
# 没有文件时
Traceback (most recent call last):
  File "D:\Desktop\Demo.py", line 4, in <module>
    file = open("new file.txt")
FileNotFoundError: [Errno 2] No such file or directory: 'new file.txt'
>>> 
========================== RESTART: D:\Desktop\Demo.py =========================
# 手动创建了文件

<_io.TextIOWrapper name='new file.txt' mode='r' encoding='cp936'>
>>> 

示例2 没有文件时,使用a模式打开

# _*_ coding:utf-8 _*_


file = open("new file.txt",'a')
    
print(file)

结果:

<_io.TextIOWrapper name='new file.txt' mode='a' encoding='cp936'>
>>> 

在目录中自动创建了一个文件夹。

1.2 打开二进制文件

使用二进制格式打开一个非文本文件。

示例:

# _*_ coding:utf-8 _*_


file = open("19.jpeg5",'ab')
    
print(file)

结果:

<_io.BufferedWriter name='19.jpeg5'>
>>> 

1.3 打开文件时指定编码格式

使用encoding指定文件编码格式。

file = open(filename,mode,encoding = "encoding")

未配置encoding时默认为打开“GBK”格式的文件,格式不对时报错(实测貌似都可以正常打开,不过文件内容没有检查,不知道会不会乱码,待确定)。

示例:

# _*_ coding:utf-8 _*_

file = open("utf-8.txt",'r')
print("Default:",file)
file = open("utf-8.txt",'r',encoding="GBK")
print("GBK:",file)
file = open("utf-8.txt",'r',encoding="utf-8")
print("UTF-8:",file)

结果:

Default: <_io.TextIOWrapper name='utf-8.txt' mode='r' encoding='cp936'>
GBK: <_io.TextIOWrapper name='utf-8.txt' mode='r' encoding='GBK'>
UTF-8: <_io.TextIOWrapper name='utf-8.txt' mode='r' encoding='utf-8'>
>>> 

实测默认编码格式为“cp936”(也就是GBK编码)

utf-8的文件格式,可以使用gbk,utf-8正常打开(可能因为系统时win10的所以没有报错,不过预计文件会乱码,带后续确认)

2.关闭文件

file.close()

先刷新缓冲区中还没有写入的信息,将未写入到文件的内容写入到文件,然后关闭文件。

3.使用with语句

使用with语句,可以保证打开文件后,执行完毕后无论是否抛出异常都释放文件资源,避免遇到非预期异常。

with expression as target:
    with-body
  • expression:表达式
  • target:变量,用来指定表达式结果
  • with-body:操作代码块

示例:

# _*_ coding:utf-8 _*_

with open("utf-8.txt",'r') as file:
    print("Default:",file)

结果:

Default: <_io.TextIOWrapper name='utf-8.txt' mode='r' encoding='cp936'>
>>> 

4.写入文件内容

file.write(string)
  • file:要写入的文件对象
  • file需要是以支持写入的模式(w,a)打开的文件,否则会报错;
  • 写入完毕后需要调用close()方法关闭文件,否则内容不会写入文件;
  • 可以使用flush()方法将缓存区内容写入文件,不用调用close()方法。

示例1,写入未调用close():

# _*_ coding:utf-8 _*_

file = open("utf-8.txt",'a')
print("Open default:",file)
file.write("我进来了")
file.write("我出来了")
file.write("我又进来了")
file.write("我又出来了")
file.write("我又进来了")
file.write("我又出来了")

结果:

 文件内容未保存,关闭后才会保存

示例2,使用flush()保存缓存:

# _*_ coding:utf-8 _*_

file = open("utf-8.txt",'a')
print("Open default:",file)
file.write("我进来了")
file.write("我出来了")
file.flush()
file.write("我又进来了")
file.write("我又出来了")
file.write("我又进来了")
file.write("我又出来了")

 结果:

示例3:使用close():

# _*_ coding:utf-8 _*_

file = open("utf-8.txt",'a')
print("Open default:",file)
file.write("我进来了")
file.write("我出来了")
file.write("我又进来了")
file.write("我又出来了")
file.close()
file.write("我又进来了")
file.write("我又出来了")

结果:

Open default: <_io.TextIOWrapper name='utf-8.txt' mode='a' encoding='cp936'>
Traceback (most recent call last):
  File "D:\Desktop\Demo.py", line 10, in <module>
    file.write("我又进来了")
ValueError: I/O operation on closed file.
>>> 

 close()之后将文件保存到文件中,之后再次写入文件会报错ValueError。

5.读取文件

5.1 读取指定字符

file.read([size])
  • file:已打开的文件对象
  • size:可选参数,用于指定读取的字符个数,如省略,则一次性读取所有内容
  • 文件打开模式必须是可读的,如r,r+模式
  • 打开文件后多次调用read()会自动往后读取

示例:

# _*_ coding:utf-8 _*_

file = open("utf-8.txt",'r')
print("Open default:",file)

print('file.read(5")',file.read(5))
print('file.read(20)',file.read(20))
print('file.read()',file.read())

结果:

========================== RESTART: D:\Desktop\Demo.py =========================
Open default: <_io.TextIOWrapper name='utf-8.txt' mode='r' encoding='cp936'>
file.read(5") 今天是星期
file.read(20) 一,苦难开始了
今天是星期二,放假还四天
file.read() 
今天是星期三,妖秀第三天
今天是星期四,还有两天了
今天是星期五,终于要放了
>>> 

可以使用seek()方法将指针指向指定的位置,然后在用read读取需要的内容。

file.seek(offset[,whence])
  • file:已打开的文件
  • offset:指定移动的字符个数,其具体位置与whence有关,注意中文编码gbk占2个,utf-8占三个
  • whence:用于指定开始计数的位置,0表示从头开始计算,1表示从当前位置开始,2表示从文件尾部开始计算,默认值为0
  • whence只支持b模式(即rb),若非b模式只能从头开始计算

5.2 读取一行

file.readline()

5.3读取全部行

file.readlines()
  • 返回字符串列表

二、文件夹操作

1. os和os.path模块

使用import导入os模块,即可使用os和os.path模块对文件夹进行操作。

import os
os模块常用属性和方法
属性或方法说明备注
name用于获取操作系统类型

nt:windows系统

posix:Linux、Unix、MacOs系统

linesep获取当前系统的换行符windows:‘\r\n’
sep获取当前系统的路径分隔符windwos:'\\'
getcwd()返回当前工作目录
listdir(path)返回指定路径下的文件和目录信息
mkdir(path[,mode])创建目录
makedirs(path1/path2...[,mode])创建多级目录
rmdir(path)删除目录
removedirs(path1/path2...)删除多级目录
chdir(path)把path设置为当前工作目录
walk(top[,topdown[,onerror]])遍历目录数,返回一个元组,包括所有路径名、所有目录列表、和文件列表3三个元素
os.path模块常用操作
方法说明备注
abspath(path)获取文件或目录的绝对路径
exists(path)用于判断目录或文件是否存在,存在返回True,否则返回False

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

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

相关文章

OPengl学习(三)——绘制几何物体和状态管理

文章目录0、 写在前面1、绘图工具1.1、清除窗口1.2、指定颜色1.3、强制完成绘图1.4、坐标系统工具2、点&#xff0c;直线&#xff0c;多边形2.1、填充多边形3、点&#xff0c;直线&#xff0c;多边形细节刻画4、基本状态管理0、 写在前面 1、OpenGL自身是一个巨大的状态机(Sta…

【CELL】compass利用单细胞转录组+流平衡分析预测细胞代谢状态,促进免疫细胞代谢研究

细胞代谢调控正常细胞功能以及多种疾病状态的病理生理。最近&#xff0c;免疫细胞代谢研究&#xff08;immunometabolism&#xff09;成为一个研究热点&#xff0c;揭示了包括抗病毒免疫、自身免疫和抗肿瘤反应在内的炎症代谢调节。然而&#xff0c;由于代谢网络的规模和复杂性…

BIO、NIO、AIO理解(I/O模型)

IO模型(unix网络编程第一卷) unix有五种I/O模型&#xff0c;好像其他系统也差不多吧。 I/O模型主要是两个阶段&#xff1a;等待数据与把数据从内核空间复制到用户空间&#xff0c;然后根据这两个阶段的不同&#xff0c;分类出来下面几类I/O模型。 前四个是同步IO,最后一个是异…

高并发下你还敢用ArrayList?过来看看CopyOnWriteArrayList吧!

一、ArrayList线程不安全 在Java的集合框架中&#xff0c;想必大家对ArrayList肯定不陌生&#xff0c;单线程的情况下使用它去做一些CRUD的操作是非常方便的&#xff0c;先来看看这个例子&#xff1a; public class ListTest {public static void main(String[] args) {List&…

GIS基于智慧城市建设的作用

​​​​​智慧城市的建设对于改善居民的生活质量和提高城市的管理水平&#xff0c;有着公认的推动作用。其中&#xff0c;地理信息技术特别是GIS平台&#xff0c;在智慧城市的建设过程中扮演着关键角色。 在现实情况中&#xff0c;除了政策本身的一些因素&#xff0c;受限于一…

Web前端105天-day44-JSCORE

JSCORE04 目录 前言 一、复习 二、forEach 三、reduce 四、展开语法 五、解构语法 六、形参默认值 七、剩余参数 总结 前言 JSCORE04学习开始 一、复习 JS的第6个版本, 带来了大量的新特性, 新语法let/const : 两个新的声明变量的方式 新的作用域 脚本: 对应全局, 用…

RocketMQ中的线程池是如何创建的?

前言 大家好&#xff0c;今天主要来和大家聊一聊RocketMQ中的线程池是如何创建的&#xff0c;如何设置线程池数量&#xff0c;同时也可以从中去学习到一些线程池的实践和需要注意的一些细节。 RocketMQ在哪些地方使用到了线程池&#xff1f; 在RocketMQ中存在了大量的对线程…

学籍信息网站

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 学籍信息管理&#xff1a;添加信息、修改信息、删除信息、查询信息 添加信息&#xff0c;管理员根据学生的将信息导入系…

[附源码]Python计算机毕业设计高校师资管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

行业分析| 智慧头盔在快对讲上的应用与实践

快对讲综合调度系统是基于移动通信网络&#xff0c; 整合集群对讲、视频监控、实时音视频技术、PSTN、GIS定位、IM和调度业务的产品&#xff0c;为客户提供专业对讲、视频会议、可视化融合指挥调度等功能为一体的音视频实时交互平台。 快对讲和智慧头盔 智慧头盔&#xff0c;…

PHP实验室管理系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP实验室管理系统 是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为PHP APACHE&#xff0c;数据库为 mysql5.0&#xff0c;使用php语言开发。 PHP…

第10讲:vue脚手架集成axios

一、创建项目并添加axios支持 创建项目请参考&#xff1a;使用脚手架创建vue项目 创建路由项目请参考&#xff1a;路由开发 1.1、添加axios支持 使用如下命令添加axios支持 npm install axios //vue-cli2.0安装方式1.2、在main.js中引用并使用axios 使用如下命令 impor…

git初识(三)

分支 顾名思义&#xff0c;分支就是从主线上分离出来进行另外的操作&#xff0c;而又不影响主线&#xff0c;主线又可以继续干它的事&#xff0c;&#xff0c;最后分支做完事后合并到主线上而分支的任务完成可以删掉了。为了不受其他开发人员的影响&#xff0c;你可以在主分支…

数据看板可视化

前言 这段时间一直在做可视化&#xff0c;在我的项目中有一部分是电力巡检的数据可视化。其中的数据看板比较简单&#xff0c;我将其单独抽离出来形成一个demo&#xff0c;为保密demo中数据非真实数据。先看效果。 具体效果 链接相关 浏览链接&#xff1a;http://xisite.top…

【人工智能与机器学习】——聚类(学习笔记)

&#x1f4d6; 前言&#xff1a;我们之前学习的算法均是有监督学习&#xff08;supervised learning&#xff09;&#xff0c;它的一个鲜明特征是通过给定的标签来学习从数据特征&#xff08;如图像&#xff09;到语义标签的映射关系。但在很多实际问题中&#xff0c;数据并没有…

vuex笔记

Vuex Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。 调试工具&#xff1a;vue devtools Vuex就像眼镜&#xff1a;您自会知道什么时候需要它。 1、state 在store中定义数据&#xff0c;在组件中直接使用&#xff1a; 目录&#xff1a;store/index.js export defau…

相关分析与回归分析

相关与回归分析就是了解变量之间相关关系的统计方法 一.相关分析 具有相关关系的变量之间&#xff0c;如果不区分原因和结果&#xff0c;我们称之为相关分析 相关分析是看两个因素之间的相关性&#xff0c;不需要确定哪个是自变量&#xff0c;哪个是因变量&#xff0c;两个因…

RK3568 GT911触摸屏调试

屏幕规格书 需要主要硬件通信电压为&#xff1a;1.8V或者3.3V I2C通信的地址&#xff1a;0x5D 和0x40 系统上电时序&#xff1a;不同的地址&#xff0c;稍微有些差异 对应代码中如下&#xff1a; 与RK3568的硬件接口电路 DTS 配置 驱动&#xff1a;RK自带的驱动程序就可以正确工…

音视频学习 -- 弱网对抗技术相关实践

背景介绍 实时音视频通话在当前的生活中是无时不刻存在的&#xff0c;包括社交、安防、交通等等各个方面都需要。用户场景复杂多变、要求严苛、网络环境不一致等给实时音视频通话带来很大条件。我们在这方向稍微做了一些工作&#xff0c;虽然和其他大厂的优化工作相比&#xf…

Commons Collections3

省流 SerialKiller 可以通过⿊名单与⽩名单的⽅式来限制反序列化时允许通过的 类&#xff0c;其中限制了cc1和cc2中命令执行的类&#xff0c;InvokerTransformer cc3就是为了绕过对其的限制&#xff0c;这里使用的是com.sun.org.apache.xalan.internal.xsltc.trax.TrAXFilter来…