[Python学习篇] Python文件操作

文件操作

打开文件
  • open

语法:

file = open(name, mode)

说明:

file:文件对象。

name:要打开的目标文件名的字符串(可以包含文件所在的具体路径)。

mode:设置打开文件的模式(访问模式):只读、写入、追加等。

mode 参数选项:

模式描述
r默认模式,以只读方式打开文件。文件的指针将会放在文件的开头。如果该文件不存在,则报错。
rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。如果该文件不存在,则报错。
r+打开一个文件用于读写。文件指针将会放在文件的开头。如果该文件不存在,则报错。
rb+以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 如果该文件不存在,则报错。
w打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
w+打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
file = open('text.txt', 'w')
向文件中写入数据
  • write

语法:

文件对象.write('内容')

file.write('hello')
关闭文件
  • close

语法:

文件对象.close()

file.close()

示例:

# 打开文件
file = open('text.txt', 'w')# 向文件中写入数据
file.write('hello')# 关闭文件
file.close()
读取文件中的数据
  • read

 语法:

文件对象.read(num)

说明:

num:表示要从文件中读取的数据的长度(单位是字节),如果没有传入num表示读取文件中所有的数据。

示例:

# 文件内容
hello
Tom
Jerry
Spike
# 打开文件
file = open('text.txt', 'r')content = file.read(2)
print(content)  # he
content = file.read(10)
print(content)  # llo  Tom Je
content = file.read(1024)# 关闭文件
file.close()
  • readlines

语法:

文件对象.readlines()

说明:

一次性读取所有内容,按照行的方式把内容存在列表中进行返回,每一行的数据为列表的一个元素。

示例:

# 文件内容
hello
Tom
Jerry
Spike
# 打开文件
file = open('text.txt', 'r')content = file.readlines()
print(content)  # ['hello\n', 'Tom\n', 'Jerry\n', 'Spike\n']# 关闭文件
file.close()
  • readline

语法:

文件对象.readline()

说明:一次读取一行数据。

示例:

# 文件内容
hello
Tom
Jerry
Spike
# 打开文件
file = open('text.txt', 'r')content = file.readline()
print(content)  # hello
content = file.readline()
print(content)  # Tom
content = file.readline()
print(content)  # Jerry# 关闭文件
file.close()
# 打开文件
file = open('text.txt', 'r')# 循环读取每一行
while True:line = file.readline()if len(line) == 0:breakprint(line)# 关闭文件
file.close()
改变文件指针(光标)位置
  • seek

语法:

文件对象.seek(offset, whence)

说明:

offset:指针偏移量

whence:起始位置,0:表示文件开头,1:当前位置,2:文件结尾。

示例:

# 打开文件
file = open('text.txt', 'r+')# 偏移量6 把hello偏移走
file.seek(6, 0)
content = file.read()  # 读到的都是名字了
print(content)  # Tom Jerry Spike# 关闭文件
file.close()

os模块操作文件和文件夹

在Python中文件和文件夹的操作要借助os模块里面的相关功能。所以需要导入os模块

import os

os.函数名()

文件或文件夹重命名

os.rename(目标文件名, 新文件名)

说明:目标文件不存在则报错。

示例:

import osos.rename('text.txt', 'text200.txt')

示例:根据当前时间重命名

import os
import datetime# 原来的文件名
filename = 'hello.mp3.txt'# 获取最后一个.所在的下标位置
index = filename.rfind('.')
print(index)  # 9# 获取文件名称
before_name = filename[:index]
print(before_name)  # hello.mp3# 获取文件后缀
after_name = filename[index:]
print(after_name)  # .txt# 重命名
current_datetime = datetime.datetime.now()
format_datetime = current_datetime.strftime('-%Y%m%d%H%M%S')
new_name = before_name + format_datetime + after_name
print(new_name)  # hello.mp3-20240706163029.txtos.rename(filename, new_name)
删除文件

os.remove(目标文件名)

说明:目标文件不存在则报错。

import osos.remove("hello.txt")
复制文件

shutil.copy(目标文件, 新文件)

import shutilshutil.copy('text.txt', 'text2.txt')
创建单个文件夹

os.mkdir()

import os# 创建单个文件夹,文件夹已存在则报错。如果不想报错,请使用 os.makedirs() 创建多层文件夹的方式
os.mkdir('a')
创建多层文件夹

os.makedir()

import os# 递归创建多层文件夹,如果上级目录不存在会先创建上级
# exist_ok=True 表示如果文件夹已经存在,不报错。
os.makedirs('a/b/c/d', exist_ok=True)
删除单个文件夹

os.rmdir()

import os# 删除单个文件夹,文件夹不存在则报错
os.rmdir('a')
删除多层文件夹

os.removedirs()  非空不能删除会报错

import os# 删除多层文件夹,如果文件夹下存在文件或文件夹则报错
os.removedirs('a/b/c/d')

shutil.rmtree()    非空也可以删除

import shutil# 删除多层文件夹,文件夹中有文件或者文件夹也一起删除
shutil.rmtree('a/b/c')
移动文件或文件夹
import shutil# 把文件移动到其他目录下
shutil.move('text.txt', 'a')
# 把文件移动到其他目录下,顺便重命名
shutil.move('text.txt', 'a/text2.txt')
# 文件夹也可以移动
shutil.move('aaa', 'a')
获取目录内容

os.listdir()

import os# .表示当前层级目录
files = os.listdir('.')
print(files)  # ['.idea', '.venv', 'hello.py', 'text200.txt']
更改当前工作目录

os.chdir()      # 更改当前工作目录后,表示再对文件或文件夹的操作在更改后的工作目录下进行。

import osos.chdir('a')
获取当前工作目录

os.getcwd()

import ospwd = os.getcwd()
print(pwd)  # D:\PycharmProjects\demo1
检查文件或文件夹是否存在
import os# 检查文件或文件夹是否存在,存在返回True,不存在返回False
exists = os.path.exists('text.txt')
print(exists)   # True False
判断是否为文件
import os# 判断是否是文件,是文件返回True,不是文件返回False
is_file = os.path.isfile('a/b/text2.txt')
print(is_file)
判断是否是文件夹
import os# 判断是否是目录,是目录返回True,不是目录返回False
is_dir = os.path.isdir('text.txt')
print(is_dir)  # False
更改文件或文件夹权限

os.chmod(path, mode)

说明:

path:文件路径

mode:权限数值,八进制格式

示例:

import osos.chmod('text.txt', 0o755)

示例二:递归修改文件夹及其所有内容的权限

import os# 递归修改文件夹及其所有内容的权限
def chmod_recursive(folder_path, mode):for root, dirs, files in os.walk(folder_path):for dir in dirs:os.chmod(os.path.join(root, dir), mode)for file in files:os.chmod(os.path.join(root, file), mode)# 修改根文件夹的权限os.chmod(folder_path, mode)# 文件夹路径
folder_path = 'a'# 权限值:所有者读写执行(7),组读执行(5),其他用户读执行(5)
chmod_recursive(folder_path, 0o755)print(f"文件夹 '{folder_path}' 及其所有内容的权限已递归设置为 755。")

权限详细说明:

权限在操作系统中是一个重要的功能,它允许你控制谁可以读取、写入或执行某个文件。不同的操作系统和文件系统可能有不同的权限模型,但在类Unix系统(如Linux和macOS)中,文件权限通常由三部分组成:所有者权限、组权限和其他用户权限。每个部分可以分别设置读、写和执行权限。

权限用三位数值表示:

例如数值:755

  • 第一位代表所有者权限。
  • 第二位代表组权限。
  • 第三位代表其他用户权限。
权限类型又分为三种
  • 读权限(r),用数字4表示
  • 写权限(w),用数字2表示
  • 执行权限(x),用数字1表示

这些值可以相加组合成多种权限,例如:

  • 读和写权限(rw)的值为 4 + 2 = 6
  • 读和执行权限(rx)的值为 4 + 1 = 5
  • 读写执行权限(rwx)的值为 4 + 2 + 1 = 7

明白每一位表示的意思,和每个数字表示的意思后。我们就可以对文件设置不同的用户权限了,例如:

  • 755:所有者的权限是7(读写执行),组的权限是5(读执行),其他用户的权限是5(读执行)
  • 644:所有者的权限是6(读写),组的权限是4(读),其他用户的权限是4(读)
  • 600:所有者的权限是6(读写),组和其他用户的权限是0(无权限)

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

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

相关文章

批导会计凭证程序报错,通过监控点和消息类来定位触发的位置

ZFIU001 批导会计凭证报错,通过监控点和消息类来定位触发的位置 在使用程序导入会计凭证的时候,发现报错,后面找了很久很久的系统标准程序,打断点才找到这个位置,使用监控点还是可以比较快速找到报错的原因的&#xff…

QWidget窗口抗锯齿圆角的一个实现方案(支持子控件)2

QWidget窗口抗锯齿圆角的一个实现方案(支持子控件)2 本方案使用了QGraphicsEffect,由于QGraphicsEffect对一些控件会有渲染问题,比如列表、表格等,所以暂时仅作为研究,优先其他方案 在之前的文章中&#…

C# LINQ 详细用法以及概念

LINQ(Language Integrated Query)是C#和.NET框架中的一个强大功能,它允许开发者使用查询语法来访问和操作数据集合。LINQ提供了一种一致且直观的方式来处理不同类型的数据源,如集合、XML文档、数据库等。本文将详细讲解LINQ的各种…

计算机网络-第4章 网络层

4.1网络层的几个重要概念 4.1.1网络层提供的两种服务 电信网面向连接通信方式,虚电路VC。 互联网设计思路:网络层要设计得尽量简单,向其上层只提供简单灵活的,尽最大努力交付的数据报服务。 网络层不提供服务质量的承诺&#…

使用 Spring 配置邮件服务器

在现代的企业应用开发中,邮件发送是一个常见的需求。Spring 提供了强大的邮件支持,使得配置和发送邮件变得非常简单。本文将介绍如何在 Spring 应用中配置邮件服务器并发送电子邮件。 1. 引入 Spring 邮件依赖 首先,在项目的 pom.xml 文件中…

昇思学习打卡-10-ShuffleNet图像分类

文章目录 网络介绍网络结构部分实现对应网络结构 模型训练shuffleNet的优缺点总结优点不足 网络介绍 ShuffleNet主要应用在移动端,所以模型的设计目标就是利用有限的计算资源来达到最好的模型精度。ShuffleNetV1的设计核心是引入了两种操作:Pointwise G…

Activity启动模式探究

一、概括 Activity的启动模式主要分为四种:standard(标准模式)、singleTop(栈顶复用模式)、singleTask(栈内复用模式)和singleInstance(单例模式)。每种模式都有其特定的…

日常学习--20240705

1、IO流 按照IO操作的数据类型分为字节流和字符流: 字节流:又分为输入流(其他程序传递过来的数据,读取流中的数据)和输出流(往流中写数据,传递给其他程序);可以操作二进制文件&…

国内采用docker部署open-metadata

背景 最近看看开源的元数据管理项目,比较出名点的有open-metadata、datahub、OpenLineage、atlas。 open-metadata有1千多的贡献者,4.8K的stars,社区现在也比较活跃,支持的数据库类型还蛮多,基本市面上常见的都有支持…

使用Python连接本地MySQL数据库并创建表后添加数据

一、使用Python连接本地MySQL数据库并创建表后添加数据 端口号:3307 用户名:root 密码:lms123456 数据库:test_01 from orm import *# 数据库连接对象 db MySQLDatabase(host"localhost",port3307,user"root…

【每日一练】python三目运算符的用法

""" 三目运算符与基础运算的对比 """ a 1 b 2#1.基础if运算判断写法: if a > b:print("基础判断输出:a大于b") else:print("基础判断输出: a不大于b")#2.三目运算法判断:…

揭秘IP:从虚拟地址到现实世界的精准定位

1.IP地址介绍 1.内网 IP 地址(私有 IP 地址) 内网 IP 地址,即私有 IP 地址,是在局域网(LAN)内部使用的 IP 地址。这些地址不会在公共互联网中路由,因此可以在多个局域网中重复使用。私有 IP 地…

股票Level-2行情是什么,应该怎么使用,从哪里获取数据

行情接入方法 level2行情websocket接入方法-CSDN博客 相比传统的股票行情,Level-2行情为投资者打开了更广阔的视野,不仅限于买一卖一的表面数据,而是深入到市场的核心,提供了十档乃至千档的行情信息(沪市十档&#…

解决Java中的跨平台开发与部署问题

解决Java中的跨平台开发与部署问题 大家好,我是微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 1. 跨平台开发的挑战与需求 随着软件应用的普及和多样化,开发人员经常面临将应用程序在不同操作系统…

STM32第十六课:WiFi模块的配置及应用

文章目录 需求一、WiFi模块概要二、配置流程1.配置通信串口,引脚和中断2.AT指令3.发送逻辑编写 三、需求实现代码总结 需求 完成WiFi模块的配置,使其最终能和服务器相互发送消息。 一、WiFi模块概要 本次使用的WiFi模块为ESP-12F模块(安信可&#xf…

【LLM第8篇】Delta Tuning

如何对large-scale PLM进行调整呢? 一个有效的方式是delta tuning;只更新PLM中的一小部分参数,其它参数不动。 把解决任务的能力具象化成delta object这样的参数,只需要几十兆参数存储。 过去模型参数是随机的,现在预…

【MySQL】逻辑架构与存储引擎

一、逻辑架构 1、MySQL逻辑架构 我们可以根据上图来对sql的执行过程进行分析 第一步:客户端与服务器建立一个连接,从连接池中分配一个线程处理SQL语句第二步:SQL接口接受SQL指令第三步:如果是5.7版本,就会先去缓存中…

Git 一种分布式版本控制系统

Git 是一种分布式版本控制系统,用于管理和追踪文件的修改历史。它具有以下基本概念和使用方式: 仓库(Repository):Git 将文件存储在仓库中,并记录文件的修改历史。仓库可以是本地仓库或远程仓库&#xff0c…

Python字符串处理常用的30种操作

我们平时编写代码时,经常需要对字符串进行处理,本文详细介绍Python处理字符串常用的30种操作,并给出了对应的代码。 分割 使用split()方法将字符串按照指定的分隔符进行分割。 s "Hello,World" result s.split(","…