[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:
        break
    print(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 os

os.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.txt

os.rename(filename, new_name)
删除文件

os.remove(目标文件名)

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

import os

os.remove("hello.txt")
复制文件

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

import shutil

shutil.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 os

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

os.getcwd()

import os

pwd = 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 os

os.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.mfbz.cn/a/778420.html

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

相关文章

C++|哈希应用->布隆过滤器

目录 一、概念 二、模拟实现 三、布隆过滤器扩展应用 上一篇章学习了位图的使用,但它只适用于整数,对于要查询字符串是否在不在,位图并不能解决。所以针对这一问题,布隆过滤器可以派上用场,至于布隆过滤器是什么&am…

G2.【C语言】EasyX绘制颜色窗口

1.窗口 窗口&#xff1a;宽度*高度&#xff08;单位都是像素&#xff09; #include <stdio.h> #include <easyx.h> int main() {initgraph(640, 480);getchar();return 0; } 640是宽&#xff0c;480是高 2.操作窗口的三个按钮 #include <stdio.h> #incl…

推荐Bulk Image Downloader插件下载网页中图片链接很好用

推荐&#xff1a;Bulk Image Downloader chome浏览器插件下载图片链接&#xff0c;很好用。 有个网页&#xff0c;上面放了数千的gif的电路图&#xff0c;手工下载会累瘫了不可。想找一个工具分析它的静态链接并下载&#xff0c;找了很多推荐的下载工具&#xff0c;都是不能分…

Github:git提交代码到github

创建 GitHub 仓库 a. 登录到您的 GitHub 账户。 b. 点击右上角的 "" 图标&#xff0c;选择 "New repository"。 c. 填写仓库名称&#xff08;例如 "Mitemer"&#xff09;。 d. 添加项目描述&#xff08;可选&#xff09;。 e. 选择仓库为 &…

Feign-未完成

Feign Java中如何实现接口调用&#xff1f;即如何发起http请求 前三种方式比较麻烦&#xff0c;在发起请求前&#xff0c;需要将Java对象进行序列化转为json格式的数据&#xff0c;才能发送&#xff0c;然后进行响应时&#xff0c;还需要把json数据进行反序列化成java对象。 …

MySQL的count()方法慢

前言 mysql用count方法查全表数据&#xff0c;在不同的存储引擎里实现不同&#xff0c;myisam有专门字段记录全表的行数&#xff0c;直接读这个字段就好了。而innodb则需要一行行去算。 比如说&#xff0c;你有一张短信表(sms)&#xff0c;里面放了各种需要发送的短信信息。 …

C语言图书馆管理系统(管理员版)

案例&#xff1a;图书馆管理系统&#xff08;管理员版&#xff09; 背景&#xff1a; 随着信息技术的发展和普及&#xff0c;传统的图书馆管理方式已经无法满足现代图书馆高效、便捷、智能化的管理需求。传统的手工登记、纸质档案管理不仅耗时耗力&#xff0c;而且容易出现错…

拉普拉斯逆变换

https://www.bilibili.com/video/BV17i4y1475Y?p21&vd_source2e6b4ba548ec9462b2f9633ff700e9b9 CV 17 陈永平教授关于拉普拉斯逆变换的式子的推导 最关键的两步 想到取一个合适的contour L R L_R LR​部分是实部 γ \gamma γ要大于所有极点的实部,这样就可以搞一个大…

2.1 tmux和vim

文章目录 前言概述tmuxvim总结 前言 开始学习的时间是 2024.7.6 ,13&#xff1a;47 概述 最好多使用&#xff0c;练成条件反射式的 直接使用终端的工具&#xff0c;可以连接到服务器&#xff0c;不需要使用本地的软件 tmux 这个主要有两个功能&#xff0c;第一个功能是分…

uni-app组件 子组件onLoad、onReady事件无效

文章目录 导文解决方法 导文 突然发现在项目中&#xff0c;组件 子组件的onLoad、onReady事件无效 打印也出不来值 怎么处理呢&#xff1f; 解决方法 mounted() {console.log(onLoad, this.dateList);//有效// this.checkinDetails()},onReady() {console.log(onReady, this.da…

TensorCore 指令与汇编编程

TensorCore 指令是 NVIDIA 在其 GPU&#xff08;图形处理单元&#xff09;中引入的一种特殊硬件指令&#xff0c;用于加速深度学习计算&#xff0c;特别是矩阵乘法和卷积操作。TensorCore 指令专为处理深度学习的张量运算而设计&#xff0c;能够在单个时钟周期内执行大量的计算…

leetcode力扣_贪心思想

455.分发饼干&#xff08;easy-自己想得出来并写好&#xff09; 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺…

机器学习——岭回归

1、岭回归与线性回归的区别 岭回归&#xff08;Ridge Regression&#xff09;和线性回归&#xff08;Linear Regression&#xff09;都是用于回归分析的统计方法&#xff0c;但它们在处理方式和应用场景上有一些关键的区别&#xff1a; a)基本概念 线性回归&#xff1a;目标是…

网易游戏员工怒怼丁磊上热搜:每天员工陪你演戏点赞有意思吗

【头部财经】近日&#xff0c;网易游戏一员工在内部群怒怼丁磊的聊天记录曝光&#xff0c;引发网友关注。据头部财经了解&#xff0c;该员工名叫石佳煊&#xff0c;是网易游戏的游戏开发工程师&#xff0c;毕业于华盛顿大学&#xff0c;已在网易工作四年多。 截图显示&#xf…

提高论文发表机会:Nature Communications 最新研究教你如何巧妙回复审稿意见

我是娜姐 迪娜学姐 &#xff0c;一个SCI医学期刊编辑&#xff0c;探索用AI工具提效论文写作和发表。 对于科研搬砖人来说&#xff0c;在论文投稿过程中&#xff0c;如何有效回复审稿意见才能得到审稿人的认可&#xff0c;一直是一个让人困惑又带点玄学的问题。 但是&#xff0c…

docker push 推送镜像到阿里云仓库

1.登陆阿里云 镜像服务&#xff0c;跟着指引操作就行 创建个人实例&#xff0c;创建命名空间、镜像仓库&#xff0c;绑定代码源头 2.将镜像推送到Registry $ docker login --username*** registry.cn-beijing.aliyuncs.com $ docker tag [ImageId] registry.cn-beijing.aliy…

白嫖A100-interLM大模型部署试用活动,亲测有效-2.Git

申明 以下部分内容来源于活动教学文档&#xff1a; Docs git 安装 是一个开源的分布式版本控制系统&#xff0c;被广泛用于软件协同开发。程序员的必备基础工具。 常用的 Git 操作 git init 初始化一个新的 Git 仓库&#xff0c;在当前目录创建一个 .git 隐藏文件夹来跟踪…

Linux 防火墙配置指南:firewalld 端口管理应用案例(二十个实列)

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f427;Linux基础知识(初学)&#xff1a;点击&#xff01; &#x1f427;&#x1f427;Linux高级管理专栏&#xff1a;点击&#xff01; &#x1f510;Linux中firewalld防火墙&#xff1a;点击&#xff01; ⏰️…

策略为王股票软件源代码-----如何修改为自己软件62----资讯菜单修改-----举例---------调用同花顺F10资讯------

//char szInfoF10[] "http://www.f10.com.cn/ggzx/ggzl.asp?zqdm%s"; char szInfoF10[] "http://basic.10jqka.com.cn/601899/"; // MENUITEM "F10资讯(&F)", ID_INFO_F10 MENUITEM &…

14-26 剑和侠客 – 预训练模型三部曲3 – 机器人时代来临

概述 在第 1 部分和第 2 部分中&#xff0c;我们讨论了适用于文本和图像任务的预训练模型&#xff0c;并探索了当今常用的模型。我们分析了这些模型的架构以及如何将它们用于特定任务。实现 AGI 所需的两个主要支柱是语言理解和机器的视觉能力。有许多任务与这两种能力有关。 …