python对文件的操作

文件的基本操作

操作文件的步骤

在计算机中要操作文件的套路非常固定,包含以下三个步骤

  1. 打开文件(首先要先找到文件并打开.)
  2. 读,写文件
    读:将文件内容读入内存
    写:将内存内容写入文件
  3. 关闭文件

操作文件的函数

在python中要操作文件需要记住以下函数

序号 函数/方法 说明
01 open 打开文件,并且返回文件操作对象
02 read 将文件内容读取到内存
03 write 将制定内容写入文件
04 close 关闭文件

open 函数负责打开文件,并且返回文件对象.read/write/close 三个方法都需要通过文件对象来调用

打开文件的方式

打开文件使用 python 内置的open()函数
open()函数默认以只读方式打开文件,并且返回一个文件对象file object(文件对象), 最常用的就是使用 3 个参数(还要其他的可选参数)
语法格式:

file = open(filename[, mode, encoding])  # ("文件名", "访问方式","编码")

参数说明:
第一个参数:filename是指的文件也包含路径. 路径可以是相对路径, 也可以是绝对路径. 不过路径分隔符要注意:window 下是反斜杠\和 mac 和 linux 下是/
第二个参数:mode是打开文件的模式. 可选. 默认是只读和文本模式(rt).支持如下模式:

Character Meaning
‘r’ open for reading (default)
‘w’ open for writing, truncating the file first
‘x’ create a new file and open it for writing
‘a’ open for writing, appending to the end of the file if it exists
‘b’ binary mode
‘t’ text mode (default)
‘+’ open a disk file for updating (reading and writing)

第三个参数:encoding,如果是文本文件, 则最好指定一下文本文件的编码.否则对一些非ascii字符没有办法解码. 目前一般文件都使用utf-8
返回值:返回值就是一个文件对象. 使用这个文件的一些 api 可以操作文件内


示例代码

file = open("test.txt", "rt", encoding="utf-8") # 默认就是 rt 表示对只读文本文件, 并且指定文件编码.

常用的文件打开模式mode

序号 访问方式 说明
01 r 等价于rt,以只读方式打开文件。文件的指针将会放在文件的开头,这是默认模式。如果文件不存在,抛出异常
02 w 等价于wt,以只写的方式打开文件(没有读的权限)。如果文件存在会被覆盖(会先把文件的长度置 0 (文件截断为0))。如果文件不存在,创建新文件
03 a 等价于at,以追加方式打开文件。如果文件已经存在,文件指针将会放在文件的结尾。如果文件不存在,创建新文件进行写入
04 r+ 等价于r+t,以读写方式打开文件。文件的指针将会放在文件的开头。如果文件不存在,抛出异常
05 w+ 等价于w+t,以读写方式打开文件。如果文件存在会被覆盖。如果文件不存在,创建新文件
06 a+ 以覆写方式打开文件。如果该文件已存在,文件指针将会访问文件的结尾。如果文件不存在,创建新文件写入

频繁的移动文件指针,会影响文件的读写效率,开发中更多的时候会以只读,只写的方式来操作文件

文件的读和写

  1. 文件读取
    open 函数的第一个参数是要打开的文件名(文件名区分大小写:如果文件存在,返回文件操作对,如果文件不存在,会抛出异常
    read 方法可以一次性读入并返回文件的所有内容
    close 方法负责关闭文件
    如果忘记关闭文件,会造成系统资源消耗,而且会影响到后续对文件的访问
    注意:方法执行后,会把文件指针移动到文件的末尾
# 1.打开
file = open("文件路径")

# 2.读取
text = file.read()
print(text)

# 3.关闭
file.close(

提示:在开发中,为了防止忘记关闭文件,通常会编写打开和关闭的代码,再编写中间针对文件的读/写操作

read 的几种方式

  1. 使用read(num)可以从文件中读取数据,num表示要从文件中读取的数据的长度(单位是字节),如果没有传入num,那么就表示读取文件中所有的数据
  2. 读取一行
    read 方法默认会把文件的所有内容一次性读取到内存
    如果文件太大,对内存的占用会非常严重,可以使用 readline 方法
    readline 方法可以一次读取一行内容
    方法执行后,会把文件指针移动到下一行,准备再次读取
    读取大文件的正确姿势
       # 打开文件
       file = open("文件名")
       
       # 循环读取文件
       while True:
       	# 读取一行内容
       	text = file.readline()
       	
       	# 判断是否读到内容
       	if not text:
       		break
       	
       	# 每读取一行的末尾已经有了一个"\n"
       	print(text, end = "")
       
       # 关闭文件
       file.close()
       
  1. 使用for … in…读取 效率更高
       # 使用for循环进行读取更效率
       file = open('demo1.txt', 'r+t', encoding='utf-8')
       for line in file:
           print(line)
           
  1. 使用readlines()进行读取,会把读取的每行内容放在一个列表当中
       file = open('demo1.txt', 'r+t', encoding='utf-8')
       # 使用readlines()进行读取,会把读取的每行内容放在一个列表当中
       print(file.readlines())
  1. 文件写出

write(string)

向文件中写入字符串, 并返回写入的字符的个数.

file = open("new.txt", "w+", encoding="utf-8")

count = file.write("你好啊abc")
print(count)

注意:

  1. 如果文件模式使用r+, 则文件不存在会抛出异常.
  2. w+, 文件不存在会自动创建文件, 并写入
  3. a+, 追加的方式写入文件

如果是写入的其他类型的数据, 则写之前需要手动转换

根据你打开文件的模式, 来决定到底是转成字符串还是转成字节对象

file = open("new.txt", "w+t", encoding="utf-8")

nums = ("a", "b", "你 好", 30)

file.write(str(nums))

文件内容

writelines()

把存储字符串的列表直接写入到文件中

写入的时候不会自动帮你格式化, 会把每个字符串元素挨个写在一起, 你应该在写入之前自行处理好格式

file = open("new.txt", "w+t", encoding="utf-8")

nums = ("a", "b", "你好")

file.writelines(nums)
  1. 其他方法

文件指针(了解)

​ 文件指针 标记从哪个位置开始读取数据

​ 第一次打开文件时,通常文件指针会指向文件的开始位置

​ 当执行了read方法后,文件指针会移动到读取内容的末尾

tell(), 和 seek()

tell()返回文件指针在当前文件中的位置. 返回的值是以字节为单位的.

seek()设置文件指针的位置

file = open("new.txt", "r+t", encoding="utf-8")

print(file.tell())  # 文件打开之后指针位置默认为 0

print(file.read(1))

print(file.tell())

file.seek(4)
print(file.read(1))

文件的关闭

关闭文件

为什么要关闭文件:

  1. 打开文件之后总是会占用一定的系统资源, 所以当你对文件操作完毕之后, 应该关闭文件.
  2. 写入数据的时候, 并不是立即写入到文件中, 一般先放入到缓冲区. 当关闭文件的时候, 再从缓冲区写入到文件中. (也可以手动调用flush()方法写入)

关闭文件调用文件对象的close()方法即可.

文件的复制

读取源文件的数据,写给目标文件

小文件:使用read(),write()

大文件:使用readline(),write()

文件/目录的常用管理操作

在终端/文件浏览器中可以执行常规的文件/目录 管理操作

​ 例如:创建,重命名,删除,改变路径,查看目录内容……

在Python中,如果希望通过程序实现上述功能,需要导入os模块

文件操作

序号 方法名 说明 示例
01 rename 重命名文件 os.rename(源文件名,目标文件名)
02 remove 删除文件 os.remove(文件名)

目录操作

序号 方法名 说明 示例
01 listdir 目录列表 os.listdir(目录名)
02 mkdir 创建目录 os.mkdir(目录名)
03 rmdir 删除目录 os.rmdir(目录名)
04 getcwd 获取当前目录 os.getcwd()
05 chdir 修改工作目录 os.chdir(目标目录)
06 path.isdir 判断是否是文件 os.path.isdir(文件路径)

提示:文件或目录操作都支持相对路径和绝对路径

文本文件的编码格式

文本文件存储的内容是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等

Python 2.x 默认使用ASCII编码

Python 3.x 默认使用UTF-8编码

ASCII编码

​ 计算机中只有256个ASCII字符

​ 一个ASCII在内存中占用1个字节的空间
UTF-8 编码格式
计算机中使用1-6个字节来表示一个UTF-8字符,涵盖了所有文字。

大多数汉字使用3个字节

[扩展内容]

在Python 2.x中第一行,增加以下代码,解释器会以utf-8编码来处理python文件

# *-* coding:utf8 *-*

也可以使用

# coding=utf8

在Python 2.x中,即使指定了文件使用UTF-8

####2.9使用 with 方式打开文件

打开文件的时候使用with关键字, 可以在文件操作完毕之后在合适时间自动关闭文件, 即使发生了异常也能关闭文件.

而且代码要比处理异常的语句少

with open("new.txt", "r+", encoding="utf-8") as file:
    print(file.read())
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章