VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > 数据分析 >
  • Python学习笔记(九)文件

十、文件

1、打开文件

​ 打开文件常用的语法格式为:

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

其中各参数为:

  • file: 必需,文件路径(相对或者绝对路径)。

  • mode: 可选,文件打开模式

  • buffering: 设置缓冲

  • encoding: 一般使用utf8

  • errors: 报错级别

  • newline: 区分换行符

  • closefd: 传入的file参数类型

  • opener:

    一般常用的为前两个参数,下面着重介绍下mode参数

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

​ 在使用open()方法后,会创建一个文件对象,我们需要把这个文件对象赋值给一个变量

f = open('F:\\test.txt', 'r')
print(f)

输出结果:<_io.TextIOWrapper name='F:\\test.txt' mode='r' encoding='cp936'>

2、文件对象方法

示例文件:

image-20200321170110547image-20200321170306766

(1) close()
close()方法的作用是关闭文件。由于Python有垃圾回收机制,所以如果没有使用代码关闭文件也不会像在C中那样造成内存泄漏。但是,在进行写入操作之后马上关闭文件依然是个好的习惯,因为Python会将写入的内容存储在缓存中,关闭文件后将缓存的数据写入,如果没有关闭文件,程序又由于某些原因(如断电)突然中止,那么缓存的数据将不会被写入文件,造成丢失。

(2) read(size=-1)
read()方法的作用是从文件指针所在位置开始按字节读取文件内容,里面的参数是读取的字符数,如果不做设置则默认读取文件的所有内容,文件指针移动至文件末尾。

f = open('F:\\test.txt', 'r')
print(f.read(6)) #读取前六个字符
f.close()

输出结果:This i
================================
f = open('F:\\test.txt', 'r')
print(f.read())
print(f.read())
f.close()

输出结果:
This is a test file.
This is the fitst line.
This is the second line.
   # 这里是第二个f.read()的输出结果,由于文件指针已经在末尾,所以没有任何内容

(3) seek(offset, from)
seek()方法的作用是在文件中移动文件指针,从from(0代表文件起始位置,1代表当前位置,2代表文件末尾)偏移offset字节。

f = open('F:\\test.txt', 'r')
print(f.read())
f.seek(15, 0) #从起始位置开始向后移动22个字符
print(f.read())
f.close()

输出结果:
This is a test file. #第一个f.read()读取的内容
This is the fitst line.
This is the second line.
This is the fitst line. #第二个f.read(),文件第一行内容加换行符为22个字符,所以从第23个开始
This is the second line.

(4) readline()
readline()方法的作用是按行读取

f = open('F:\\test.txt', 'r')
print(f.readline())
f.close()

输出结果:
This is a test file.
  #由于有换行符,所有输出的结果下方还有一个空行

​  在Python中我们也可以用for将文件对象中的内容迭代出来

f = open('F:\\test.txt', 'r')
for each_line in f:
    print(each_line)
f.close()

输出结果:
This is a test file.

This is the fitst line.

This is the second line.

(5) writelines(seq)
writelines()方法的作用是向文件写入字符串序列

f = open('F:\\test.txt', 'a+') #以可读写追加模式打开
s = ['\nThis is the first new line.\n','This is the second new line']
f.writelines(s)
f.seek(0,0) #由于追加模式文件指针在文件末尾,所以我们要移动到开头再读取
print(f.read())
f.close()

输出结果:
This is a test file.
This is the fitst line.
This is the second line.
This is the first new line.
This is the second new line.

(6) write()
write()方法是将一个字符串写入文件

f = open('F:\\test.txt', 'a+') #以可读写追加模式打开
f.write('\n这是追加的内容')
f.seek(0,0)
print(f.read())
f.close()

输出结果:
This is a test file.
This is the fitst line.
This is the second line.
This is the first new line.
This is the second new line.
这是追加的内容

(7) tell()
tell()方法的作用是返回当前在文件中的位置

f = open('F:\\test.txt', 'r')
f.seek(23,0)
print(f.tell())
f.close()

输出结果:23

3、Pickle模块

​ 当我们用write()writelines()等方法将列表、字典之类的层次结构写入文件时,写入的是文本(字符串)形式,我们很难再将其从文件中读取后转换回原来的结构。这时候我们就用到了pickle模块。
​ pickle模块实现了用于序列化和反序列化Python对象结构的二进制协议。 “pickling”是将Python对象层次结构转换为字节流的过程, “unpickling”是反向操作,从而将字节流(来自二进制文件或类似字节的对象)转换回对象层次结构。
​ 简单来说就是pickle模块的作用是将Python中的对象层次结构转换为二进制的形式进行保存,以及从保存的文件中读取并转换回对象层次结构。

import pickle #引入pickle模块

myList = [1, 2, 3, 'August', ['A', 'B', 'C']]
pickleFile = open('F:\\myList.pkl', 'wb') #由于存储为二进制所以打开模式为wb,后缀名视情况随意
pickle.dump(myList, pickleFile) #将myList存入文件
pickleFile.close()

image-20200324124936022

import pickle
pickleFile = open('F:\\myList.pkl', 'rb')
myList2 = pickle.load(pickleFile) #反序列化
print(myList2)
pickleFile.close()

输出结果:[1, 2, 3, 'August', ['A', 'B', 'C']]

相关教程