一.文件

文本文件:可以处理各种语言所需的字符,只包含基本文本字符,不包括诸如字体,字号,颜色等信息。

可以在文本编辑器和浏览器中显示,即在任何情况下,文本文件都是可读的

二进制文件:每一种二进制文件都需要自己的处理程序才能打开并操作。

如:Word文档,PDF,图像,可执行程序等

二.文件的访问

(1).使用open()打开(建立)文件,返回一个file图像

(2).使用file对象的读/写方法对文件进行读/写操作

读操作:将数据从外存传输到内存的过程

写操作:将数据从内存传输到外存的过程

(3).使用file对象的close()方法关闭文件

1.打开(建立)文件

使用open()函数打开(建立)文件时,会建立文件和使用它的程序之间的连接,并返回代表连接的文件对象。

文件对象也称为文件描述符或文件流。

当建立了Python程序和文件之间的连接后,就创建了‘流数据’。通常程序使用输入流读出数据,使用输出流写入数据。

=>fileobj=open(filename[,mode[,buffering]])

=>filename:文件名,可以是绝对路径,也可以是相对路径

=>mode:指明文件类型和操作的字符串

'r':读模式;若文件不存在,发生FileNotFoundError异常;默认值

'w':写模式;若文件不存在,则创建文件再打开;若文件存在,则清空文件内容再打开

'a':追加模式;若文件不存在,则创建文件再打开;若文件存在,打开文件后将新内容追加至原内容之后

'x':创建写模式;如果文件不存在,则创建文件;若果文件存在,返回FileExitError异常

't':文本文件模式;默认值

'b':二进制模式;可添加到其他模式中使用

'+':读/写模式;可添加到其他模式中使用

=>buffering:控制缓冲

=>print(filename):打印文件对象可以看到文件名,读/写模式和编码格式

2.读文本文件

=>read()方法

无参数read():一次性读取文件全部内容为一个字符串

有参数read(a):设置最大读入字符数a来限制read()一次返回的大小

=>readline()方法

一次获取文件的一行为一个字符串返回

=>readlines()方法

返回一个字符串列表,每一项是文件中每一行的字符串

3.写文本文件

以w/a模式打开文件时,不能进行读操作,否则会报错

=>write()方法

filename.write(字符串)

注:write()方法不能自动在字符串末尾添加换行符,需要自己添加’\n‘

例:自定义函数copy_file函数,实现文件内容的复制

[code]def copy_file(oldfile,newfile):

oldFile=open(oldfile,"r")

newFile=open(newfile,"w")

strr=oldFile.read()

print("oldfile:")

print(strr)

newFile.write(strr)

return

copy_file("D:\\Python\\Hello.txt","D:\\Python\\Hello2.txt") #传递文件路径

=>writelines()方法

向文件写入一个序列字符串列表

filename.writelines(list)

注:list元素必须全部为字符串,不能为整数序列等

4.文件内移动

当使用open()函数打开文件时,该函数在内存中创建缓冲区,将磁盘上的文件内容复制到缓冲区。

文件对象将缓冲区视为一个大的列表,列表中的每一个元素都有自己的索引,文件对象按字节对缓冲区索引技术。

文件对象会对文件当前位置(当前读/写操作发生的位置)进行维护。

=>filename.tell():可以计算文件当前位置和开始位置之间的字节偏移量。

=>filename.seek(offset[,whence]):设置新的文件当前位置,允许在文件中跳转,实现对文件的随机访问

将文件当前指针由引用点(whence)移动指定的字节数(offset)到指定的位置

=>offset:字节数,表示偏移量

=>whence:引用点,有三个取值

文件开始处为0,默认值;以文件的开始处作为基准位置,此时offset非负

当前位置为1,以文件当前位置为基准位置,此时offset可以为负

文件结尾处为2,以文件末尾作为基准位置

注:当文件以文本文件方式打开时,只能默认从文件头计算偏移量。即:whence为1或者2时,offset只能取0。

[code]exampleFile=open("D:\\Python\\example.txt","w+")

exampleFile.write("123456789")

exampleFile.seek(3)

exampleFile.write("ZUT")

exampleFile.seek(0)

s=exampleFile.read()

exampleFile.close()

print(s)

#123ZUT789

exlFile=open("D:\\Python\\example.txt","r+b")

exlFile.seek(3)

exlFile.seek(-1,1)

s=exlFile.read(3)

print(s)

#b'3ZU'

5.文件的关闭

关闭文件是取消程序和文件之间连接的过程,内存缓冲区的所有内容将写入磁盘,因此必须在使用文件后关闭文件确保信息不会丢失

=>try/finally语句

[code]helloFile=open("D:\\Python\\hello.txt","w")

try:

helloFile.write("Hello,Sunny Day!")

finally:

helloFile.close()

=>with语句

with语句可以打开文件并赋值给对象,文件会在语句结束后自动关闭,即使是由于异常引起的结束也是如此

[code]with open("D:\\Python\\hello.txt") as helloFile:

s=helloFile.read()

print(s)

6.二进制文件读/写