Python实战教程|基础数据类型之文件操作

    /    2018-07-12

计算机系统分为:计算机硬件,操作系统,应用程序三部分。

我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周知,应用程序是无法直接操作硬件的,这就用到了操作系统。操作系统把复杂的硬件操作封装成简单的接口给用户应用程序使用,其中文件就是操作系统提供给应用程序来操作硬盘虚拟概念,用户或应用程序通过操作文件,可以将自己的数据永久保存下来。

一、python中操作文件两种方式:

方式一:内置函数open()

file_obj=open(file, mode='r', encoding='utf-8')


参数file用来指定文件的相对路径或绝对路径。

参数mode用来指定文件的打开模式,常用模式如下:

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


参数encoding指定操作文件的字符编码,未指定encoding将使用当前操作系统的默认字符编码(Linux默认为UTF-8,Windows默认为GBK)。

方式二:使用with来管理上下文

with会打开文件将文件对象赋值给file_obj,然后在执行完子代码块的文件操作后自动调用file_obj.close()方法。

with open(file, mode='r', encoding='utf-8') as file_obj:
    文件操作...


二、操作文件方法:

文件对象file_obj内置了操作文件的方法,常用的读写方法有:

方法名含义
file_obj.read()默认读取文件所有内容。
file_obj.readline()默认读取一行内容。
file_obj.readlines()默认读取文件所有行,以列表的形式返回。
file_obj.write(s)写入内容s。
file_obj.writelines(lines)将序列lines中的所有元素写入。


当方法read()、readline()返回空字符串/字节串时,代表文件读取完毕,根据这一点,我们可以循环读取文件的每一行内容。

while True:
    line=file_obj.readline()
    if not line:
        break
    print(line)


也可以使用更为便捷的for循环来迭代读取文件的每一行内容

for line in file_obj: #迭代一次则读出文件一行内容并赋值给line,读完为止
    print(line)


三、文件指针移动

每个文件对象内部都维护一个文件指针,以r或w模式打开文件时指针指向文件开头,以a模式打开文件时指针指向文件末尾,读写操作都是基于上一次指针所在位置的基础上进行偏移的。

我们也可以使用方法file_obj.seek(offset,whence)控制指针的偏移:

offset 代表偏移量,单位为字节。

whence 默认值的为0,代表以文件开头为参照物。

whence=1 则代表以当前位置为参照物。

where=2 则代表以文件末尾为参照物。

with open('test.txt','w+b') as f:
    f.write('大王叫我来巡山'.encode('utf-8'))
    print(f.tell()) #查看当前指针所在位置为21
    f.seek(3,0) #以文件开头为起始,移动3个字节,移过了中文字符'大'
    print(f.tell()) #查看当前指针所在位置为3
    print(f.read(3).decode('utf-8')) #再读取3个字节,解码的结果为字符'好'


(8)

分享至