首页 > 编程语言 >python文件操作

python文件操作

时间:2023-08-05 20:36:03浏览次数:42  
标签:文件 编码 python file 操作 close txt open

Python文件操作

目录

1 文件的编码

1.1 背景

thinking:计算机只能识别:0和1,那么我们丰富的文本文件是如何被计算机识别,并存储在硬盘中呢?

answer:使用编码技术(密码本)将内容翻译成0和1存入。

编码技术即:翻译的规则,记录了如何将内容翻译成二进制,以及如何将二进制翻译回可识别内容。

计算机中有许多可用编码:

  • UTF-8
  • GBK
  • Big5
  • ...

不同的编码,将内容翻译成二进制也是不同的。

UTF-8是目前全球通用的编码格式。除非有特殊需求,否则,一律以UTF-8格式进行文件编码即可。

image-20230805113204807
1.2 总结
1.2.1 什么是编码?
  • 编码就是一种规则集合,记录了内容和二进制间进行相互转换的逻辑。
  • 编码有许多中,我们最常用的是UTF-8编码。
1.2.2 为什么需要使用编码?
  • 计算机只认识0和1,所以需要将内容翻译成0和1才能保存在计算机中。
  • 同时也需要编码,将计算机保存的0和1,反向翻译回可以识别的内容。

2 文件的读取

2.1 什么是文件
  • 内存中存放的数据在计算机关机后就会消失。要长久保存数据,就要使用硬盘、光盘、U 盘等设备。为了便于数据的管理和检索,引入了“文件”的概念。

  • 一篇文章、一段视频、一个可执行程序,都可以被保存为一个文件,并赋予一个文件名。操作系统以文件为单位管理磁盘中的数据。一般来说,文件可分为文本文件、视频文件、音频文件、图像文件、可执行文件等多种类别。

2.2 文件操作的内容

在日常生活中,文件操作主要包括打开、关闭、读、写等操作。

2.3 文件的操作步骤

大概可以分为三个步骤(简称文件操作三步走):

  1. 打开文件

  2. 读写文件

  3. 关闭文件

注意:可以只打开和关闭文件,不进行任何读写。

2.3.1 open()打开函数

在Python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件,语法如下

(1)open()函数,open(name, mode, encoding)

name:是要打开的目标文件名的字符串(可以包含文件所在的具体路径)。
mode:设置打开文件的模式(访问模式):只读 r 、写入 w (如果该文件己存在则打开文件,并从开头开始编辑,原有内容会被删除。如果该文件不存在,创建新文件)、追加 a (打开一个文件用于追加。如果该文件已存在,新的内容将会被写入到已有内容之后如果该文件不存在,创建新文件进行写入等。
encoding:指定编码格式(推荐使用UTF-8)。

`f = open(r'D:\git\ceshi.txt', 'r', encoding='utf-8')`

'f'是open函数的文件对象

(2)with open()函数

with open('python.txt', 'r') as fo:   

fo.readlines()

通过在with open的语句块中对文件进行操作 # 可以在操作完成后自动关闭close文件,避免遗忘掉close方法。

2.3.2 读操作相关方法

(1)read()方法:

文件对象.read(num)

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

image-20230804225657148 image-20230804231149674

(2)readlines()方法:

readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。

image-20230804232152909

(3)readline()方法,一次读取一行内容

image-20230804232632102 image-20230804233600040

(4)for循环读取文件行,读取文件的全部内容

image-20230804234119425

(5)close():关闭文件对象

f = open('python.txt', "r")

f.close() 

最后通过close(),关闭文件对象,也就是关闭对文件的占用。

文件读取完成后,要使用文件对象close()方法关闭文件对象,否则文件会被一直占用。如果不调用close,同时程序没有停止运行,那么这个文件将一直被python程序占用。

2.3.3 操作汇总

image-20230805000635037

3 文件的写入

f = open(r'D:\git\ceshi.txt', 'w', encoding='utf-8')
f.write("123")
f.close()
  • 文件如果不存在,使用”w”模式,会创建新文件
  • 文件如果存在,使用”w”模式,会将原有内容清空
  • 直接调用write(),内容并为真正写入文件,而是会积攒在程序的内存中,称之为缓冲区
  • flush(),立即刷新内容到硬盘中
  • close()方法,带有flush()方法的功能

image-20230805073534252

4 文件的追加

f = open(r'D:\git\ceshi.txt', 'a', encoding='utf-8')
f.write("123")
f.close()
  • a模式,文件不存在会创建文件
  • a模式,文件存在会在最后,追加写入文件
  • 可以使用'\n',写出换行符
image-20230805075231070 image-20230805075609437

5 文件操作综合案例

# 打开文件得到文件对象,准备读取
fr = open(r'D:\git\ceshi.txt', "r", encoding="UTF-8")
\# 打开文件得到文件对象,准备写入
fw = open(r'D:\git\ceshi.txt.bak', "w", encoding="UTF-8")
\# for循环读取文件
for line in fr:
    line = line.strip() # 使用for循环逐行读取文件.在每次循环开始时,使用strip()方法去除行首尾的空白字符。
    \# 判断内容,将满足的内容写出
    splitted_line = line.split(",") # 将当前行使用逗号分割,并将结果存储在 splitted_line 变量中。
    if len(splitted_line) >= 5 and splitted_line[4] == "测试":
        # 如果列表的长度大于等于5,并且第五个元素为 “测试
        continue  # 若满足条件,则使用 continue 关键字跳过当前行,继续下一次循环。
    \# 将内容写出去
    fw.write(line) # 如果条件不满足,将当前行写入 ceshi.txt.bak 文件中,并在行末尾手动添加换行符。
    \# 由于前面对内容进行了strip()的操作,所以要手动的写出换行符
    fw.write("\n")
\# 关闭文件对象
fr.close()
fw.close()  # 写出文件调用close()会自动flush()

运行结果如下图:

image-20230805083930381

6 文件中路径的表达

6.1 绝对路径

一级一级将文件的路径表达出来(中国--->山东省--->青岛市--->黄岛区)

r'D:\git\u204\coal_press\stope_class\workface\text\zk_json.txt'
6.2 相对路径

相对路径是指相对于当前工作目录或者当前文件所在目录的文件或目录的路径。相对路径不包含完整的磁盘路径或根目录,而是通过引用相对于当前位置的路径片段来定位文件或目录。

(1)代码文件和 zk_json.txt 文件位于同一个目录中,可以使用以下代码:

file_name = 'zk_json.txt'
file_path = os.path.join(os.path.dirname(__file__), file_name)
image-20230805151234126

(2)文件 zk_json.txt 不在代码文件的同一目录下,而是在相对路径的某个子目录中,可以使用以下方式进行更改:

# 相对路径的子目录名为 text
file_name = 'text/zk_json.txt'
file_path = os.path.join(os.path.dirname(__file__), file_name)
image-20230805085750081

(3)文件 zk_json.txt 不在代码文件的同一目录下,而是在相对路径的某个上级目录中,可以使用"…/"来表示上级目录。这里,"…/"表示返回上级目录一级。如果要返回更多级的上级目录,可以使用"…/…/""…/…/…/"等。根据你的实际目录结构,相应地调整相对路径的级别和文件名。

file_path = "../zk_json.txt"
file_path = os.path.join(os.path.dirname(__file__), file_name)

文本文件在代码的上级目录中的路径使用

image-20230805151733467

文本文件在代码的上上级目录中的路径使用

image-20230805153243833

标签:文件,编码,python,file,操作,close,txt,open
From: https://www.cnblogs.com/wangkaixuan123/p/17608563.html

相关文章

  • Spring源码之XML文件中Bean标签的解析1
    读取XML文件,创建对象xml文件里包含Bean的信息,为了避免多次IO,需要一次性读取xml文件中所有bean信息,加入到Spring工厂。读取配置文件newClassPathResource("applicationContext.xml")ClassPathResource是Spring封装的一个类型;Resource接口:可以读取相关资源文件的内容获得......
  • 文件系统与磁盘分区
    磁盘分区里有MBR分区格式,GPT分区格式Windows常用的分区格式有三种,分别是FAT16,FAT32,NTFS,格式。Linux操作系统里有Ext2,Ext3,Linuxswap和VFAT四种格式。Linux版本CentOS7一般必须要有哪几个分区:根分区(/)主分区,交换分区,/boot分区,/home分区,扩展分区,逻辑分、硬盘格式化可以选择多......
  • Python 潮流周刊第 14 期(内容摘要)
    你好,我是猫哥。这里每周分享优质的Python、AI及通用技术内容,本期分享的全部是英文材料。本周刊由Python猫出品,精心筛选国内外的250+信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进Python技术,并增长职业和......
  • [oeasy]python0079_控制序列_光标位置设置_ESC_逃逸字符_CSI
    光标位置回忆上次内容上次我们研究的比较杂类型转化进制转化捕获异常版本控制生成帮助文档变量的常用类型变量的生命周期控制数据类型主要研究了两个字符串str整型数字int字符串型和整型数字型变量是可以相互转化的加法运算逻辑会根据操作变量的不同而不同整型变量的加法是......
  • [oeasy]python0079_控制序列_光标位置设置_ESC_逃逸字符_CSI
    光标位置回忆上次内容上次我们研究的比较杂类型转化进制转化捕获异常版本控制生成帮助文档变量的常用类型变量的生命周期控制 数据类型主要研究了两个字符串str 整型数字int  字符串型和整型数字型变......
  • 2023.8.5 周六:DDL--操作表
    1#查询当前数据库的所有表2showtables;34#查询表的结构5descfunc(表的名称);67#创建表注:最后一行不加逗号8creattable表名9(10字段名1,数据类型1,11字段名2,数据类型2,12...13...14字段名n,数据类型n15);1617例,要创......
  • 第一章 python语言基础
    1.5Python中的对象1.5.1对象的身份一般用对象在内存中的存储位置作为对象的身份,用于唯一标识对象。用id()获取对象的标识a=123id(a)1.5.2对象的类型对象的类型表示对象可以存储什么类型的值用type()获取对象的类型type(a)1.5.3对象的值对象所表示的数据用p......
  • python系列教程211——map
    声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好地理解AI技术,我让助理负责分享这套python系列教程,希望能帮到大家!由于这套python教程不是由我所写,所以不如我的AI技术教学风趣幽默,学起来比较枯燥;但它的知识点还是讲到位的了,也值......
  • 如何通过gRPC传输文件
    在gRPC中,可以通过将文件分割成多个小块,然后使用流式RPC将这些小块发送到服务器来传输文件。以下是一个简单的示例,展示了如何在gRPC中实现文件传输。首先,我们需要定义一个服务来处理文件传输。在.proto文件中,我们可以定义一个UploadFile服务,它接收一个流式的Chunk消息,并返回一个Up......
  • python的类方法--实例对象方法
    https://blog.csdn.net/weixin_60535956/article/details/127432990  方法区别若要修改实例的属性值,直接使用实例方法。若要修改类的属性值,直接使用类方法若是辅助功能(如打印菜单等),考虑使用静态方法,即可在不创建对象的前提下使用。注意:使用类名不能访问实例属性或实例......