Python文件读写

目录

打开文件

关闭文件

在finally代码块中关闭文件

在with as代码块中关闭文件

读写文本文件

复制文本文件

读写二进制文件

复制二进制文件

文件是数据的载体,程序可以从文件中读取数据,也可以将数据写入文件中。

文本文件和二进制文件的区别是在文本文件的内部以字符型时存储数据,字符是有编码的。在二进制文件的内部以字节形式存储数据,没有编码的概念。二进制文件较为常用。

打开文件

我们在使用文件之前要先将文件打开,这通过open()函数实现。 open()函数的语法如下:

open(file,mode='r',encoding=None,errors=None)

 open()函数中的参数还有很多,这里介绍4个常用参数,这些参数的含义如下。

(1)file参数

file参数用于表示要打开的文件,可以是字符串或整数。如果file是字符串,则表示文件名,文件名既可以是当前目录的相对路径,也可以是绝对路径;如果file是整数,则表示一个已经打开的文件。

(2)mode参数

mode参数用于设置文件打开模式,用字符串表示,例如rb表示以只读模式打开二进制文件。用于设置文件打开模式的字符串中的每一个字符都表示不同的含义,对这些字符的具体说明如下。

t:以文本文件模式打开文件。

b:以二进制文件模式打开文件。

r:以只读模式打开文件。

w:以只写模式打开文件,不能读内容。如果文件不存在,则创建文件;如果文件存在,则覆盖文件的内容。

x:以独占创建模式打开文件,如果文件不存在,则创建并以写入模式打开;如果文件已存在,则引发FileExistsError异常。

a:以追加模式打开文件,不能读内容。如果文件不存在,则创建文件;如果文件存在,则在文件末尾追加。

+:以更新(读写)模式打开文件,必须与r、w或a组合使用,才能设置文件为读写模式。

这些字符可以进行组合,以表示不同类型的文件的打开模式,如下表所示。

Python文件读写_第1张图片

 (3)encoding参数

encoding用来指定打开文件时的文件编码,默认是UTF-8编码,主要用于打开文本文件。

(4)errors参数

errors参数用来指定在文本文件发生编码错误时如何处理。推荐errors参数的取值为'ignore',表示在遇到编码错误时忽略该错误,程序会继续执行,不会退出。

f=open('test.txt','w+')
f.write('World')
print('1、创建test.txt文件,World写入文件')

f=open('test.txt','r+') # 以r+模式打开文件,由于前面已经创建了该文件,所以会覆盖文件的内容
f.write('Hello')
print('2、打开test.txt,Hello覆盖文件内容')

f=open('test.txt','a')
f.write(' ')
print(r'3、打开test.txt文件,在文件尾部追加空格" "')

# fname=r'C:\Users\tony\OneDrive\漫画Python\code\ch12\test.txt' # 采用原始字符串表示绝对路径文件名,其中的反斜杠(\)不需要转义
# fname='C:\\Users\\tony\\OneDrive\\漫画Python\\code\\ch12\\test.txt' # 采用普通字符串表示绝对路径文件名,其中的反斜杠(\)需要转义
fname='C:/Users/tony/OneDrive/漫画Python/code/ch12/test.txt' # 采用普通字符串表示绝对路径文件名,可以将反斜杠(\)改为(/)
f=open(fname,'a+') # 以a+模式打开文件,也会在文件末尾追加内容
f.write('World')
print('4、打开test.txt文件,在文件尾部追加World')

注意:打开文件时,a只能追加写入文件,不可读文件;而a+既可以追加写入文件,也可以读文件

关闭文件

在打开文件后,如果不再使用该文件,则应该将其关闭,会用到close()方法。

在finally代码块中关闭文件

对文件的操作往往会抛出异常,为了保证对文件的操作无论是正常结束还异常结束,都能够关闭文件,我们应该将对close()方法的调用放在异常处理的finally代码块中。

f_name='test.txt'
f=None
try:
    f=open(f_name)
    print('打开文件成功')
    content=f.read()
    print(content)
except FileNotFoundError as e:
    print('文件不存在,请先使用程序1创建文件')
except OSError as e:
    print('处理OSError异常')
finally:
    if f is not None: # 判断f变量是否有数据,如果文件有数据,则说明文件打开成功
        f.close()
        print('关闭文件成功')

在with as代码块中关闭文件

Python中还提供了一个with as代码块。可以帮助我们自动释放资源(包括关闭文件的操作),可以替代finally代码块,优化代码结构。

f_name='test.txt'
with open(f_name) as f:
    content=f.read()
    print(content)

with as提供了一个代码块,在as后面声明一个资源变量,在with as代码块结束之后自动释放资源。

读写文本文件

读写文本文件的相关方法如下。

read(size=-1):从文件中读取字符串,size限制读取的字符数,size=-1指对读取的字符数没有限制。

readline(size=-1):在读取到换行符或文件尾时返回单行字符串 。如果已经到文件尾,则返回一个空字符串。size是限制读取的字符数 ,size=-1表示没有限制。

readlines():读取文件数据到一个字符串列表中,每一行数据都是列表的一个元素。

write(s):将字符串s写入文件中,并返回写入的字符数。

writelines(lines):向文件中写入一个字符串列表。不添加行分隔符,因此通常为每一行末尾都提供行分隔符。

flush():刷新写缓冲区,在文件没有关闭的情况下将数据写入文件中。

复制文本文件

下面给出一个文本文件复制示例。

Python文件读写_第2张图片

 示例代码如下:

f_name='src_file.txt'
with open(f_name,'r',encoding='gbk') as f: # 以只读模式打开文本文件,注意文件编码形式是GBK,与字符集的大小写没有关系
    lines=f.readlines() # 读取所有数据到一个列表中
    copy_f_name='dest_file.txt'
    with open(copy_f_name,'w',encoding='utf-8') as copy_f: # 以只写模式打开文本文件,注意文件编码的形式是UTF-8
        copy_f.writelines(lines) # 将列表数据lines写入文件中
        print('文件复制成功')

读写二进制文件

二进制文件的读写单位是字节,不需要考虑编码问题。二进制文件的主要读写方法如下。

read(size=-1):从文件中读取字节,size限制读取的字节数,如果size=-1,则读取全部字节。 readline(size=-1):从文件中读取并返回一行。size是限制读取的行数,如果size=-1,则没有限制。

readlines():读取文件数据到一个字节列表中,每一行数据都是列表的一个元素。

write(b):写入b字节,并返回写入的字节数。

writelines(lines):向文件中写入一个字节列表。不添加行分隔符 ,因此通常为每一行末尾都提供行分隔符。

flush():刷新写缓冲区,在文件没有关闭的情况下将数据写入文件中。

复制二进制文件

下面给出一个文件复制示例。

f_name='logo.png'
with open(f_name,'rb') as f: # 以只读模式打开logo.png文件,图片文件属于二进制文件
    b=f.read() # 读取所有数据,将数据保存在字节对象b中
    copy_f_name='logo2.png'
    with open(copy_f_name,'wb') as copy_f: # 以只写模式打开复制后的文件
        copy_f.write(b) # 将字节对象b写入文件中
        print('文件复制成功')

你可能感兴趣的:(Python从入门到精通,python)