文章目录

  • 文件概念和作用
  • 文件类型
  • 文件操作流程
    • 文件读取方式
  • 文件写入方式
      • Tips:
    • 文件其他方法
    • 文件复制
    • 补充部分
    • 文件指针
      • f.seek()应用
    • 修改文件的两种方式:

文件概念和作用

什么是文件?文件就是操作系统提供给用户/应用程序操作硬盘的一种虚拟的概念/接口

  • 计算机中的文件,就是存储在某种长期存储设备上的一段数据
  • 长期存储的设备包括:硬盘、U盘、移动硬盘、光盘等
  • 将数据长期保存下来,在需要的时候使用
  • 在计算机中,文件是以二进制方式保存的

文件类型

  • 文本文件:可以使用文本编辑器查看,本质上还是二进制文件
  • 二进制文件:不能使用文本编辑器查看,需要使用对应解释器查看(图片、音频、视频)

为何要用文件?用户/应用程序可以通过文件将数据永久保存到硬盘中,即操作文件就是操作硬盘。直接操作的是文件,对文件进行的所有操作,都是在向系统发送系统调用,然后再由操作将其转换成具体的硬盘操作

文件操作流程

  • 打开文件:open
  • 读取文件:read
  • 写入文件:write
  • 关闭文件:close
open(file, mode='r', buffering = -1, encoding=None, errors=None, newline=None,closefd=True, opener=None)
参数 参数说明
file 必需,文件路径(相对或者绝对路径)
mode 可选,文件打开模式
encoding 一般使用utf-8
buffering 设置缓冲
errors 报错级别
newline 区分换行符
closefd 传入的file参数类型

文件读取方式

read([size])

  • read([size]):传递参数,读取指定的字节数;如果未给定或为负则读取所有;返回为字符串
  • 文件指针会移动到文件内容的末尾,执行之后不会再读取到文件内容
  • 适用于文件内容较少

readline([size])

  • readline():每次执行会读取一行内容,包含“\n"字符串;返回为字符串内容
  • 读取完后指针会移动到文件末尾
  • 指定参数,则返回指定大小的字节数
  • 可与循环结合使用
file = open("readme.txt", encoding="utf-8")
while True:text = file.readline()  # 无限循环读取,条件为真时
#  判断是否读取到内容if not text:break     # 如果没有读取到内容,就停止print(text)
file.close()

readlines([sizeint])

  • reaslines([sizeint]):读取文件所有行,并返回为列表
  • 若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比 sizeint 较大, 因为需要填充缓冲区。

文件读取格式(可以自动关闭)

with open(file='fath_path', mode='r', encoding='utf-8') as f:data = f.read()   # 返回整个文件数据,如果文件较大,不建议用这种方法data1 = f.readline()  # 返回一行数据data2 = f.readlines()  # 以列表格式,返回整个文件数据

实例

# f = open('myfiles.txt', 'r', encoding='utf-8')
# data = f.read()
# print(data)
# f.close()with open('myfiles.txt', 'r', encoding='utf-8') as f:data = f.read()print(data)

文件写入方式

file.write(str)

  • 将字符串写入文件,返回的是写入字符串的长度

file.writelines(sequnence)

  • 向文件写入一个序列字符串列表,如果需要换行,则需要加入换行符

文件写入格式

with open(file = 'file_path', mode = 'w', encoding = 'utf-8') as f:file.write(str)  # 将字符串写入文件file.writelines(sequence)  # 向文件写入一个序列字符串列表,如果需要换行则自己要加入换行符

mode常用参数

mode参数 参数说明
r 只读方式打开(默认)
w 只写方式打开,如果文件存在会覆盖文件已有的内容,如果文件不存在会自动创建
a 追加的方式打开文件,追加的内容会写入文件末尾
r+ 读写方式打开文件,文件指针会放在开头,文件不存在,抛出异常
w+ 读写方式打开文件,如果文件存在会被覆盖。文件不存在创建新文件
a+ 读写方式打开文件,文件已存在,文件指针会放在文件末尾,如果文件不存在,创建文件写入内容
b 二进制模式,比如rb、wb、ab;以bytes类型操作数据

频繁的移动文件指针,会影响文件的读写效率,因此在实际开发中通常会以只读、只写方式操作文件

Tips:
  • print后面带 end=’’,表示不换行
  • 换行写入方式:file.write(’\n’ + “假如我年少有为不自卑,懂得什么是珍贵,那些美梦,没给你我一生有愧!”)
  • \t:制表符,\n换行符(windows的换行是\r\n,unix的是\n,mac的是\r),\r回车

文件其他方法

方法 描述
file.flush() 刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件,而不是被动的等待输出缓冲区写入
file.fileno() 返回文件一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。
file.isatty() 果文件连接到一个终端设备返回 True,否则返回 False。
file.seek(offset[, whence]) 移动文件读取指针到指定位置
file.tell() 返回文件当前位置。
file.truncate([size]) 从文件的首行首字符开始截断,截断文件为 size 个字符,无 size 表示从当前位置截断;截断之后后面的所有字符被删除,其中 windows 系统下的换行代表2个字符大小。

文件复制

小文件复制

  1. 首先以只读方式打开源文件,然后以只写方式打开目标文件
  2. 读取源文件内容
  3. 将源文件内容写入目标文件
  4. 关闭源文件和目标文件
"""
# 读取文件
with open("axian.jpg", "rb") as file_pic:data = file_pic.read()pass# 写入文件
with open("axian_copy.jpg", "wb") as file_copy:result = file_copy.write(data)
"""# 合并写法
with open("axian.jpg", "rb") as file_pic, open("axian_copy.jpg", "wb") as file_copy:data = file_pic.read()file_copy.write(data)

大文件复制

  1. 使用readline一行一行进行复制

补充部分

mode =“x”:只写模式,不可读,文件存在就报错,不存在则创建

with open("test.txt", mode="x", encoding="utf-8") as f:f.write("测试")

文件指针

  • 指针移动的单位都是以bytes字节为单位

  • 特殊情况:t(文本-默认)模式下的read(n),n代表的是字符个数

  • f.seek(n, 模式):n是指移动的字节个数,模式是指指针参照位置

    1. 0:参照物是文件开头位置(可以在t模式下使用)
    2. 1:参照物是当前指针位置
    3. 2:参照物是文件末尾位置(一般用于反向移动,n则为负数)
  • f.tell():获取文件指针当前的位置

f.seek()应用

  1. 创建文件test_03_wite_file.py
# 写入日志
with open("access.log", mode="a+", encoding="utf-8") as f:f.write("记录日志=======")
  1. 创建文件test_04_file_seek.py(实现监控日志)
import time# 应用f.seek()监控日志
with open("access.log", mode="rb") as f:f.seek(0, 2)  # 将指针跳到文件末尾while True:line = f.readline()if len(line) == 0:time.sleep(0.3)else:print(line.decode("utf-8"), end=" ")

修改文件的两种方式:

# 修改文件的两种方式:1,全部读取,然后修改并写入;1,逐行读取产生新文件,删除旧文件
# 方式1:会耗内存(文本编辑器方式)
with open('test.txt', mode='rt', encoding='utf-8') as f:data = f.read().replace('python', 'java')with open('test.txt', mode='wt', encoding='utf-8') as f1:f1.write(data)# 方式2:会在硬盘有两份文件(应用程序)
import oswith open('test.txt', mode='rt', encoding='utf-8') as f, \open('test1.txt', mode='wt', encoding='utf-8') as f1:for line in f:f1.write(line.replace('java', 'python'))
os.remove('test.txt')
os.rename('test1.txt', 'test.txt')

Python基础_09:文件操作相关推荐

  1. python基础之文件操作,集合,函数

    文件操作: 打开文件的方法: 第一种:打开文件执行完命令后,需要关闭文件,否则会一直占用内存空间 f=open('/data/1.txt','r+')    #后面的r+ 表示打开文件的模式是读写 # ...

  2. python基础之文件操作 内置模块(13)

    文件操作: 打开文件,读写文件,操作文件内容 写入文件操作:(把大象装进冰箱) 1.打开文件 open() #1.打开冰箱门 2.向文件中添加内容 write() #2.把大象塞进去 3.关闭文件 c ...

  3. python文件替换一行_python基础_文件操作实现全文或单行替换的方法

    这篇文章主要介绍了关于python基础_文件操作实现全文或单行替换的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 python修改文件时,使用w模式会将原本的文件清空/覆盖.可以 ...

  4. [Python从零到壹] 三.语法基础之文件操作、CSV文件读写及面向对象

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  5. python中最基础的文件操作,你都懂吗?

    今天讲一下python中的文件操作,虽然在开发中我们很少操作文件,大部分的需求基本上是在数据库中完成,因为数据库的数据更安全,操作效率高,操作文件就面临着我们需要自己管理文件,但是我们平常测试或者做一 ...

  6. python怎么读取文件-python怎么读写文件操作

    本节内容:I/O操作概述 文件读写实现原理与操作步骤 文件打开模式 Python文件操作步骤示例 Python文件读取相关方法 文件读写与字符编码 一.I/O操作概述 I/O在计算机中是指Input/ ...

  7. 第六篇:python基础之文件处理

    第六篇:python基础之文件处理 阅读目录 一.文件处理流程 二.基本操作 2.1 文件操作基本流程初探 2.2 文件编码 2.3 文件打开模式 2.4 文件内置函数flush 2.5 文件内光标移 ...

  8. python怎么读写文件-python怎么读写文件操作

    本节内容:I/O操作概述 文件读写实现原理与操作步骤 文件打开模式 Python文件操作步骤示例 Python文件读取相关方法 文件读写与字符编码 一.I/O操作概述 I/O在计算机中是指Input/ ...

  9. python 对 yaml 文件操作

    python 对 yaml 文件操作 #!/usr/bin/env python # -*- encoding: utf-8 -*- """ @Introduce : p ...

  10. Python实现tab文件操作

    Python实现tab文件操作 # -*- coding:gbk -*- import os class TABFILE:     def __init__(self, filename, dest_ ...

最新文章

  1. 计算机考研379分能进复试吗,考研423分复试被刷,因低级错误错失985大学,这种教训非常深刻...
  2. 1分钟读懂直播和音视频通话的区别
  3. google怎么做(2.相似网页算法)
  4. 台式电脑键盘字母乱了_电脑键盘上的一个不起眼的按键,特别实用却被粗心的人忽略...
  5. ASP.NET工作笔记之一:图片上传预览及无刷新上传
  6. 注册、登陆、审核练习
  7. shell 命令 --ps aux | grep
  8. 你还在用HTTP吗?HTTP/3都来了。。。
  9. FPGA浮点数定点数的处理
  10. c32语言,c32rtomb转换为什么编码?
  11. Java 分布式框架面试题合集
  12. 航空摄影与正射摄影的区别
  13. linux top命令看到的实存(RES)与虚存(VIRT)分析
  14. day030进程的两种创建方法,验证进程的空间隔离,join等待子进程
  15. 苹果和虫子c语言编程题,虫子吃苹果:每天10分钟,锻炼少儿编程计算思维
  16. ProFTPD对接LDAP
  17. Steam Deck——硬盘,网络,模拟器一命通关教程
  18. matlab 坐标轴居中,MATLAB 把坐标轴(X Y轴)移到坐标原点
  19. 脚注交叉引用序号不一样_不为人知的Word交叉引用设置
  20. nnunet入门之一 (CT图像分割)

热门文章

  1. 导航组件—Android应用中使用ViewPager2创建滑动视图
  2. 数字信号处理翻转课堂笔记4
  3. 直接扫描到win10系统的计算机,win10系统安装扫描仪提示“启用windows 服务之前,无法将此设备用于计算机”的详细技巧...
  4. 关于调查问卷统计分析的见解
  5. Oracle数据文件scn不一致,控制文件与数据文件头SCN不一致导致数据库无法启动故障处理...
  6. Lync 地址簿同步知识点
  7. IMX6Q camera 驱动总结( 1 )
  8. linux系统下centos7 或 openwrt安装 使用 SpeedTest 测速
  9. python udp 丢包_TFTP 使用不关心丢包的 UDP 传输,它是怎么保证数据的完整性的?...
  10. 60.实现elementUI表格点击某一行选中勾选框