python基础(十二)文件处理

python基础(十二)文件处理

1、文件处理

1.1、打开文件

1. 说明

在Python中打开文件使用open函数, 可以打开一个已经存在的文件, 如果改名称文件不存在则创建一个新文件。

2. 语法说明

open('文件名称','打开模式', encoding='编码格式')

3. 示例

# 打开
a = open("a.txt", 'a', encoding='utf-8')

4. 打开模式

模式 描述
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。
w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
w+ 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

1.2、读取文件

1. 说明

通过open打开文件后,根据打开的模式,可以对文件进行读操作。需要r的模式。

2. 语法说明

  • read() 每次读取整个文件,它通常将读取到底文件内容放到一个字符串变量中,也就是说 read() 生成文件内容是一个字符串类型。
  • readline()每只读取文件的一行,通常也是读取到的一行内容放到一个字符串变量中,返回str类型。
    • 可以指定读取的字符长度
    • 假如指定长度小于第一行,则返回第一行全部内容
    • 指定长度多于第一行,但少于第二行结尾,则返回前两行
  • readlines()每次按行读取整个文件内容,将读取到的内容放到一个列表中,返回list类型。
文件对象.read([最多读取字节数])
文件对象.readline([最多读取字节数])
文件对象.readlines()

3. 示例

# 打开
a = open("a.txt", 'rb')
# 读取数据全部
# 如果以字节读取需要解码
print(a.read().decode('utf-8'))
# 正常读取的话就直接read()即可
# print(a.read())
# 关闭文件
a.close()


4. 注意

文件指针问题:

打开文件后文件指针默认指向文件开头,之后随着读文件的操作移动到读文件操作的结束位置

读取起始位置:

文件指针指向的位置

1.3、写文件

1. 说明

通过open打开文件后,根据打开的模式,可以对文件进行写操作。需要w或a的模式。

2. 语法说明

文件对象.write(写入内容)

3. 示例

# 打开
a = open("a.txt", 'r', encoding='utf-8')
# 写入数据
a.write('hello,的')
# 关闭文件
a.close()

4. 注意

w与a的区别是:

w会对源文件进行覆盖,而a是进行追加

b是指:

以二进制字节进行写入。一般用于图片视频等文件的读写。

1.4、with

1. 说明

在with 中的代码块在执行的过程中发生任何情况,关联的对象资源最终都会被关闭。如果代码块在执行的过程中发生了一个异常,那么在这个异常被抛出前,程序会先将被打开的资源关闭。

2. 语法

with open(文件地址) as 文件名:
    代码块

3. 示例

with open("a.txt", 'r', encoding='utf-8') as a:
    print(a.read())

2、文件定位

2.1、tell()

1. 说明

返回当前文件指针在文件中的位置。

2. 注意

tell返回的是字节数,在gbk中汉字占两字节,utf中是三字节

3. 示例

with open("a.txt", 'r', encoding='utf-8') as a:
    print(a.read(2))  # 中文
    print(a.tell())  # 6

2.2、truncate()

1. 说明

用于截断文件

2. 注意

  • truncate(字符长度)
    • 因为gbk中汉字占两字节,utf中是三字节 所以如:以utf加载 数值需要被3整除
  • 需要模式为r+或rd+
  • 截断操作会直接影响源文件
  • 需要文件指针在文件开头位置

3. 示例

with open("a.txt", 'r+', encoding='utf-8') as a:
    a.truncate(2)
    print(a.read())

2.3、seek()

1. 说明

移动文件指针到指定位置

2. 语法

seek() 方法语法如下:

fileObject.seek(offset[, whence])
  • offset -- 开始的偏移量,也就是代表需要移动偏移的字节数,正数是向前,负数是向后
  • whence:可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起

3. 注意

seek的移动长度,因为gbk中汉字占两字节,utf中是三字节 所以如:以utf加载 数值需要被3整除

如果没有以二进制的模式打开文件,那么seek只支持从文件开头开始算。

4. 示例

with open("a.txt", 'rb') as a:
    print(a.read(6).decode('utf-8')) # 啊实
    # 移到回到开始位置  a.seek(-6,1)一个效果
    a.seek(0,0)
    print(a.read(6).decode('utf-8')) # 啊实

3、小结

  • 文件读写
  • 文件指针定位
posted @ 2022-06-02 13:42  三途河畔人  阅读(342)  评论(0)    收藏  举报