zoukankan      html  css  js  c++  java
  • python学习之【第十一篇】:Python中的文件操作

    1.前言

    在Python中,对文件的操作主要遵循以下流程:

    1. 打开文件,得到文件句柄并赋值给一个变量
    2. 通过文件句柄对文件进行操作
    3. 关闭文件

    2.打开文件

    使用open函数,可以打开一个已经存在的文件,或者创建一个新文件。

    语法:

    open(文件名及路径,打开模式,编码方式)

    如:

    # 以只读模式,并以utf-8编码方式打开当前目录下的hello.txt文件,将文件句柄赋值给变量f
    f = open('./hello.txt','r',encoding='utf-8')
    

    打开文件的内部过程如下:

    1. 由应用程序向操作系统发起系统调用open(...)
    2. 操作系统打开该文件,并返回一个文件句柄给应用程序
    3. 应用程序将文件句柄赋值给变量f

    Python中的文件打开模式有以下几种:

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

    3.关闭文件

    打开一个文件操作结束后切记关闭文件。

    # 关闭文件
    f.close()
    

    4.读文件

    4.1 read(num)

    使用read(num)可以从文件中读取数据,num表示要从文件中读取的字符数,如果没有传入num,那么就表示读取文件中所有的数据。

    注意:每读取一点数据,光标就会移动到被读取数据的末尾,当下一次读取时,会从上一次读取的末尾继续读取。当不传入num读取文件中所有的数据时,光标会移动到文件的末尾。

    例如有hello.txt文件,其内容为:

    Hello World
    

    使用read()读取:

    f = open('hello.txt', 'r', encoding='utf-8')
    print(f.read(1))    # 输出 H
    print(f.read(1))    # 输出 e
    print(f.read(1))    # 输出 l
    print(f.read())     # 输出 lo World
    print(f.read(1))    # 此时光标已经移动到文件末尾,所以这次读取内容为空
    f.close()
    
    

    4.2 readline()

    readline()读取是以行为单位读取,一次读取一行内容,光标会移动到第二行首部。

    例如有hello.txt文件,其内容为:

    Hello World1
    Hello World2
    Hello World3
    Hello World4
    

    使用readline()读取:

    f = open('hello.txt', 'r', encoding='utf-8')
    # 使用readline()读取
    print(f.readline())    # 输出 Hello World1
    print(f.readline())    # 输出 Hello World2
    f.close()
    

    4.3 readlines()

    readlines()可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。

    例如有hello.txt文件,其内容为:

    Hello World1
    Hello World2
    Hello World3
    Hello World4
    

    使用readline()读取:

    f = open('hello.txt', 'r', encoding='utf-8')
    # 使用readlines()读取
    print(f.readlines())    # 输出['Hello World1
    ', 'Hello World2
    ', 'Hello World3
    ', 'Hello World4
    ']
    f.close()
    

    5.写文件

    当向文件内写入内容时,open()函数的文件访问模式必须为w写入模式,如果写入的文件不存在,则系统会自动创建该文件并写入;如果写入的文件已经存在并且文件内有内容,则新写入的内容会覆盖原有内容。

    5.1 write()

    write()方法用于向文件中写入指定字符串。

    使用write()方法向hello.txt文件中写入数据:

    f = open('hello.txt', 'w', encoding='utf-8')
    # 使用write()写入
    f.write('你好,世界')
    f.close()
    

    5.2 writelines()

    writelines()`方法用于向文件中以行为单位批量写入,方法中传入列表作为参数,列表的每个元素为要写入的一行数据。

    f = open('hello.txt', 'w', encoding='utf-8')
    # 使用writelines()写入
    f.writelines(['你好,世界1
    ', '你好,世界2
    '])
    f.close()
    

    5.3 追加写入

    上面使用w模式写入文件时,如果源文件内已有内容,则会覆盖原有内容,如果在写入新数据时不想覆盖原有内容并且在原有内容后面追加,则需要以a追加模式打开文件。

    hello.txt原有内容为:

    Hello World1
    Hello World2
    Hello World3
    Hello World4
    

    以追加模式向其写入新内容:

    # 文件追加写入
    f = open('hello.txt', 'a', encoding='utf-8')
    f.writelines(['你好,世界1
    ', '你好,世界2
    '])
    f.close()
    

    写入后hello.txt内容为:

    Hello World1
    Hello World2
    Hello World3
    Hello World4
    你好,世界1
    你好,世界2
    

    6.b模式操作文件

    b模式,即以二进制方式读写文件。我们知道,不是所有的文件都可以以文本方式读写,例如图片,视频等文件就必须以二进制的方式来处理。

    这里,我们可以模拟一下图片复制的过程:

    1.以二进制方式读取源图片文件;

    2.创建一个跟源文件格式相同的目标文件;

    3.将读取的源图片文件数据再以二进制方式写入新创建的目标文件中;

    代码如下:

    # 以二进制读取rb方式打开源图片文件
    src_f = open('1.png', 'rb')
    # 读出源图片文件数据,存储为img_data
    img_data = src_f.read()
    # 关闭源图片文件
    src_f.close()
    
    # 以二进制写入wb方式打开目标图片文件
    dst_f = open('2.png', 'wb')
    # 将读取的源图片文件数据写入目标文件
    dst_f.write(img_data)
    # 关闭目标文件
    dst_f.close()
    

    7.with操作符

    打开一个文件切记操作完毕后手动关闭文件,有时候为了快速并且防止忘记关闭文件我们常常采用with操作符来打开处理文件,用with操作符处理文件,处理完毕后不需要我们手动关闭 文件,系统会帮我们自动关闭文件。

    语法:

    with open(...) as f:
        '具体操作'
    

    注意

    f=open(...)是由操作系统打开文件,那么如果我们没有为open指定编码,那么打开文件的默认编码很明显是操作系统说了算了,操作系统会用自己的默认编码去打开文件,在windows下是gbk,在linux下是utf-8若要保证不乱码,文件以什么方式存的,就要以什么方式打开。

  • 相关阅读:
    【转】日本留学——修士申请注意事项
    【转】日本留学读研究生和修士有什么区别?申请误区有哪些
    【转】为什么说学一门小语种,就能打开新世界的大门?
    【转】TED:两年一门外语--她总结了学外语的秘诀
    【转】为什么一定要学一门外语?
    【转】学完标准日本语初级至高级,可以过日语n1吗?
    【转】去日本语言学校前,日语应该达到几级呢?
    Cordova学习
    敏捷开发实录(二)
    Mac端博客发布工具推荐
  • 原文地址:https://www.cnblogs.com/wangjiachen666/p/9723536.html
Copyright © 2011-2022 走看看