当前位置: 首页 > article >正文

Python简单文件操作day9

1、文件操作的重要性和场景

重要性:

        数据持久化、跨平台兼容性、数据备份与恢复、数据共享、配置管理、日志记录

应用场景:

        数据分析、web开发、文本处理

2、文件的概念

文件是一个存储在某种持久性存储介质【硬盘、光盘、磁盘等】上的数据的结合。

文件可以包含各种类型的信息:文本、图像、音频、视频、应用程序代码以及其他类型的二进制数据。

文件通常由数据、元数据、文件系统等几部分组成。

文件的属性有:文件名、位置、文件类型、文件大小、创建日期、修改日期、访问权限。

2.1.2文件的分类

windows系统下大致分为以下几种:

  1. 文本文件:包含可读字符的文件,如.txt .csv .py .html等
  2. 二进制文件:包含不可直接读的原始二进制数据的文件,如.exe .jpg .mp3等
  3. 可执行文件:可以被操作系统执行的文件,如.exe
  4. 数据文件:用于存储应用程序数据的文件,如数据库文件、配置文件等
  5. 目录/文件夹:用于组织和管理其他文件的特殊文件

在Linux系统下,有以下几种:

  1. - 普通文件
  2. d 目录文件
  3. b 块设备文件【底层驱动文件】
  4. c 字符设备文件【底层驱动文件】
  5. l 链接文件【类似于快捷方式】
  6. p 管道文件,用于进程间的通信
  7. s 套接字文件,用于网络通信的端点

文本文件:

  • 文本文件是由单一特定编码组成的文件,如UTF-8编码。
  • 由于存在编码,文本文件也被看成是存储着数据的长字符串。

二进制文件:

  • 直接由比特0和1组成,没有统一字符编码
  • 一般都存在二进制0和1的组织结构,即文件格式
s='你好世界'
print(s)
print(s.encode())#二进制

2.1.3文件位置

绝对路径:带有盘符的或者带有网址的

C:\Users\admin\Desktop\py_gj\py_day3

相对路径:

./py_gj/py_day3                当前路径

../py_gj/py_day3                上一级路径

2.2文件操作

2.2.1打开文件open

语法:

open(file, [mode='r', buffering=-1, encoding=None])

参数:

  • file: 必需,文件路径(相对或者绝对路径)
  • mode: 可选,文件打开模式,默认为r
  • buffering: 可选,设置缓冲
  • encoding: 可选,一般使用utf-8

返回值:一个文件对象

mode常用的模式:

打开方式

功能

文件存在时

文件不存在时

r

只读方式打开文件

打开

报错

r+

以读写方式打开文件

打开

报错

w

只写方式打开文件

打开(清空之前内容)

新建

w+

以读写方式打开文件

打开(清空之前内容)

新建

a

以追加方式打开文件(写)

打开,保留之前内容

新建

a+

以读写方式打开文件

打开,保留之前内容

新建

mode参数还可以指定以什么样的编码方式读写文本,默认情况下open是以文本形式打开文件的,比如上面的四种mode模式。

当我们需要以"字节[二进制]"形式读写文件时,只需要在mode参数的后面加 b 就可以了。

  1. rb 以二进制形式打开一个文件,只读
  2. wb 以二进制形式打开一个文件,只写
  3. wb+ 以二进制形式打开一个文件,读写

demo1:读取文件

  1. 我们在同级目录下创建一个名为111的txt文本文件,同时创建一个test.py文件,通过代码去读取其中的内容。
  2. 我们在111.txt中写入两行内容: Life is short, You need Python 人生苦短,我用python
  3. 然后在test.py中写入读取代码
# 1、打开文件
f = open("./111.txt", encoding='utf-8')
# 2、读取内容
read_data = f.read()
# 3、输出读取到内容
print(read_data)
# 4、关闭
f.close()

2.2.2with关键字

当我们使用open直接打开文件,进行文件操作后,需要使用close进行文件保存和关闭。但是这种方式不是最好的,为什么呢?因为在文件操作过程中一旦有报错,那么文件还能正确关闭吗?——不能

如何解决呢?——使用 with 关键字

优点:当我们操作文件的代码块结束后,文件会正确关闭,即便文件操作报错,也会正确关闭,无需手动调用close()

with open('./111.txt', encoding='utf-8') as f:
    read_data = f.read()
    print(read_data)

2.2.3关闭文件close()

语法格式:
file.close()

2.2.4 read()方法

语法格式:
f.read(size) # f为文件对象

参数:

  • size(可选):为数字,表示从已打开文件中读取的字节计数,默认值为-1,默认情况下为读取全部。
with open('./111.txt', encoding='utf-8') as f:
    read_data = f.read(5)
    print(read_data)

2.2.5 readline()方法与readlines()方法

1.readline()方法

f.readline(size)

参数size表示从文件读取的字节数

with open('./111.txt', encoding='utf-8') as f:
    x = f.readline(5)
    y = f.readline()
    z = f.readline()
    print(x, y, z)

注意: readline()方法会记住上一个readline()读取的位置,接着读取下一行

2.readlines()方法

读取文件的所有行,返回值是一个列表

with open('./111.txt', encoding='utf-8') as f:
    x = f.readlines()
    print(x)

# ['我的文件内容是这样的\n', 'Life is short, You need Python\n', '人生苦短,我用python']

2.2.6 write()方法

在python中使用write()方法将字符串写入文件中。

f.write(str) # f为文件对象

参数:

  • str代表要写入的字符串

demo:

s = '欢迎来到华清远见上海中心\n时间是2024年11月14日\n星期四'

with open('./111.txt', encoding='utf-8', mode='w') as f:
    f.write(s)

2.2.7 文件指针定位

f.tell()
功能:返回文件的当前位置,即文件指针当前位置

fileObject.seek(offset[, whence])
功能:将文件内部光标定位到指定的位置
参数:offset:开始的偏移量,也就是代表需要移动偏移的字节数
     whence:可选,默认值为 0,
      
             0代表从文件开头开始算起
      
             1代表从当前位置开始算起
      
             2代表从文件末尾算起
eg:
f.seek(p,0)  移动到文件第p个字节处,绝对位置

f.seek(p,1)  移动到相对于当前位置之后的p个字节

f.seek(p,2)  移动到相对文章尾之后的p个字节


f.seek(0,0)  移动到文件开头
             
s='hello world!'
with open('wenzhang','wb+')as f:
    f.write(s.encode())
    f.seek(-3,2)
    f.seek(1,1)
    print(f.read(1))
#输出是b'd'

引用os,可以进行目录删除与创建

import os
try:
    os.mkdir('./一层目录')
except Exception as e:
    print(e)
try:
    os.rmdir('./一层目录./二层目录')
    os.rmdir('./一层目录')

except Exception as e:
    print(e)
try:
    os.makedirs('./一层目录./二层目录')
except Exception as e:
    print(e)

将 1-100 之间能被 5 整除的数保存在列表 numbers 中

 1. 将 numbers 中的元素写入到文件 num.txt 中

2. 使用文件操作方式打开 num.txt 文件读取内容,并计算它们的平均数 

numbers=[str(i)+'\n' for i in range(1,101) if i%5==0]
with open('./num.txt',mode='w')as f:
    f.writelines(numbers)
with (open('num.txt','r')as f):
    print(f.readlines())
    f.seek(0)
    sum=0
    for i in f.readlines():
        sum+=int(i)
    print(sum/len(numbers))
    


http://www.kler.cn/a/394185.html

相关文章:

  • 【数学二】线性代数-线性方程组-齐次线性方程组、非齐次线性方程组
  • 三、损失函数
  • 传奇996_21——龙岭事件
  • apache2配置多站点
  • sol机器人pump机器人如何实现盈利的?什么是Pump 扫链机器人?
  • 11张思维导图带你快速学习java
  • RocketMQ学习笔记
  • vue3 中那些常用 靠copy 的内置函数
  • ChatGPT提问prompt范例模板
  • MySQL高级(二):一条更新语句是如何执行的
  • Flutter:input输入框
  • DOCKER 镜像基础命令
  • Windows 云服务器搭建 FTP 服务
  • 深度学习之全连接、局部连接、全卷积与局部卷积
  • 大数据-224 离线数仓 - 数仓 技术选型 版本选型 系统逻辑架构 数据库命名规范
  • CTF攻防世界小白刷题自学笔记13
  • Mybatis中批量插入foreach优化
  • Jmeter基础篇(22)服务器性能监测工具Nmon的使用
  • zookeeper之节点基本操作
  • Spark 读取 HDFS 文件时 RDD 分区数的确定原理与源码分析
  • ubuntu[无桌面]——使用FileZilla连接本地和虚拟机实现文件共享
  • AI数字人短视频生成--核心源头技术开发
  • StarRocks Summit Asia 2024 全部议程公布!
  • [pyspark] pyspark中如何修改列名字
  • 【机器学习】如何配置anaconda环境(无脑版)
  • 前端(2)——快速入门CSS