likes
comments
collection
share

Python教程 - 文件读写

作者站长头像
站长
· 阅读数 68

本篇将介绍“文件读写”的内置函数 open,通过 Python 的 open 函数,就能针对电脑中的文件,进行新增、打开、编辑等操作。

使用 open()

Python 内置的 open()使用的语法如下所示,文件表示文件的路径和文件名,模式则代表打开文件后,能对这个文件编辑的权限模式,默认为 r。

f = open('文件', 模式)

open()还有几个可以不填写的参数,不填写则会使用默认值:

参数说明
newline换行模式,默认 None (使用通用换行符号,等同 ''),可以是''、'\n'、'\r' 或 '\r\n'。
encoding解码或编码文件名,默认 None。
errors处理解码或编码时的错误,默认 None。
buffering内存缓冲区大小,默认-1。
closefd判断文件名或文件描述,默认 True。
opener文件描述,默认 None。

文件路径

文件的路径使用“相对路径”,相对于“执行这个 Python 程序的位置”,例如 Python 的程序位于 file 文件夹下,要访问 file/demo 文件夹内的 test.txt 文件时,路径就是"demo/test.txt"。

f = open('demo/test.txt','r')
a = f.read()
print(a)
f.close()

Python教程 - 文件读写

访问模式

使用 open()打开文件时,可指定打开后文件的访问模式,默认是文本模式打开,后方如果有“+”号,表示在功能上不仅可以读取,也可以写入:

模式说明
r、rt读取文件 (默认值,文件必须存在)。
w、wt写入文件 (如果文件不存在,就创建新文件,如果文件存在,则清空内容并将其覆写)。
x、xt创建新的文件 (只针对不存在的文件,如果文件已经存在,则操作失败)。
a、at从文件的最末端添加内容 (如果文件不存在,就创建新文件)。
r+、rt+读取并更新文件 (更新方式从文件起始处写入内容)。
w+、wt+写入并读取文件(会清空并覆盖内容)。
a+、at+从文件的最末端添加内容并读取文件。

如果后方加上 b,则会以二进制模式打开:

模式说明
rb以二进制模式读取文件。
wb以二进制模式写入文件。
xb以二进制模式创建一个新的文件。
ab以二进制模式从文件的最末端添加内容。
rb+以二进制模式读取并更新文件。
wb+以二进制模式写入并读取文件。
ab+以二进制模式从文件的最末端添加内容并读取文件。

举例来说,如果打开文件时模式设置为 w,就无法使用读取的方法读取文件内容。

f = open('demo/test.txt','w')   # 使用 w 模式
a = f.read()   # 发生错误  not readable
print(a)

如果打开文件时设置 r+,则可以读取内容也可以从开头的地方加入内容(使用 r 或 r+时,文件必须存在,否则会发生错误)。

f = open('demo/test.txt','r+')
a = f.read()
f.write('hello')
print(a)
f.close()

操作方法

打开文件后,可以通过下列常用的方法操作文件:

方法说明
read(size)读取文件内容,默认不设置 size,不设置 size 会读取整个文件,如果设置 size 则会读取指定的字节数量。
readline(size)读取文件的第一行内容,默认不设置 size,没有设置 size 就会读取一整行,如果设置 size 则会读取指定的字节数量。
readlines(size)读取文件内容并以列表方式返回,默认不设置 size,如果没有设置 size 会读取全部内容,如果设置 size 则会返回包含 size 大小的那几行。
readable()文件是否可读取,返回 True 或 False。
write(文字内容)写入内容。
writelines(文字内容列表)以列表方式写入内容,如果需要换行必须自行加入换行符号\n。
writable()文件是否可写入,返回 True 或 False。
tell()返回目前读取文件指针的位置 (文件从头算起的字节数)。
seek(偏移量, 起始位置)移动文件指针 (起始位置默认 0 表示文件开头,1 为当前位置,2 为文件结尾)。
close()关闭文件,并释放内存。
  • read(size)

    示例的代码使用两种方式读取内容为 hello world 的 txt 文件(如果只设置一个 f1,使用 read()之后就会自动读取整份文件,read(2)就会失效,所以使用 f1 和 f2),如果没有设置 size,则完整读取整份文件,如果有设置 size,则读取到 size 的字节数,读取的文件如果超过电脑的内存大小,则会发生问题(读取 1GB 的文件就会消耗 1GB 的内存)。

    f1 = open('demo/test.txt','r')
    f2 = open('demo/test.txt','r')
    a = f1.read()
    b = f2.read(2)
    print(a)     # hello world
    print(b)     # he ( 只读取前两个字节 )
    f1.close()
    f2.close()
    
    
  • readline(size)

    示例的代码使用两种方式读取内容为第一行 hello world 的 txt 文件,如果没有设置 size,则完整读取第一行,如果有设置 size 则读取第一行的 size 字节数,若 size 超过第一行的数量,就会完整读取第一行(就算文件有很多行,还是只会读取第一行)。

    f1 = open('demo/test.txt','r')
    f2 = open('demo/test.txt','r')
    a = f1.readline()
    b = f2.readline(2)
    print(a)      # hello world
    print(b)      # he ( 只读取单一行的前两个字节 )
    f1.close()
    f2.close()
    
    
  • readlines(size)

    示例的代码使用两种方式读取内容为三行 hello world、good morning 和 12345 的 txt 文件,如果没有设置 size 则读取全部的文件内容,以行为单位返回为列表,如果有设置 size,则会以 size 抵达的字节位置行数为最大行数,返回为列表。

    f1 = open('demo/test.txt','r')
    f2 = open('demo/test.txt','r')
    a = f1.readlines()      # 读取全部的行,变成列表形式
    b = f2.readlines(20)    # 读取包含 20 个字节的行,变成列表形式
    print(a)      # ['hello world\n''good morning\n''12345']
    print(b)      # ['hello world\n''good morning\n']
    f1.close()
    f2.close()
    
    
  • readable()

    示例的代码执行后,会显示这个文件是否能读取,或是否能写入,返回 True 或 False。

    f1 = open('demo/test.txt','w')
    f2 = open('demo/test.txt','r')
    print(f1.readable())    # Fasle  因为设置 w
    print(f2.readable())    # True   因为设置 r
    f1.close()
    f2.close()
    
    
  • f.write(文字内容)

    示例的代码执行后,会清空原本 test.txt 的内容,写入新的内容。

    f1 = open('demo/test.txt','w')
    f1.write('good morning')     # 写入 good morning
    f1.close()
    
    
  • f.writelines(文字内容列表)

    示例的代码执行后,会清空原本 test.txt 的内容,并以列表方式写入内容,如果需要换行必须自行加入换行符号\n。

    f1 = open('demo/test.txt','w')
    f1.writelines(['123\n','456\n','789\n'])   # 写入三行内容
    f1.close()
    
    
  • writeable()

    示例的代码执行后,会显示这个文件是否能读取,或是否能写入,返回 True 或 False。

    f1 = open('demo/test.txt','w')
    f2 = open('demo/test.txt','r')
    print(f1.writeable())    # True   因为设置 w
    print(f2.writeable())    # False  因为设置 r
    f1.close()
    f2.close()
    
    
  • tell()

    示例的代码执行后,会返回目前读取文件指针的位置 (文件从头算起的字节数)。

    f1 = open('demo/test.txt','r')
    a = f1.read(5)    # 读取前五个字节,读取完毕后指针位在 5
    t = f1.tell()     # 读取指针位置
    print(a)          # hello
    print(t)          # 5
    f1.close()
    
    
  • seek(偏移量, 起始位置)

    示例的代码执行后,会将指针从开头位置移动 5 个字节,然后再读取 5 个字节 (起始位置默认 0 表示文件开头,1 为当前位置,2 为文件结尾)。

    f1 = open('demo/test.txt','r')   # 内容为 123456789
    f1.seek(2,0)     # 将指针移动到 2 和 3 中间
    a = f1.read(5)   # 读取后方五个字节
    print(a)         # 34567
    f1.close()
    
    
  • close()

    关闭文件,并释放内存。

使用 with

使用 with 可以打开文件,执行相关操作后自动关闭文件并释放内存,使用的语法如下:

with open('demo/test.txt','w'as f1:
    f1.write('good morning')     # 写入 good morning
    # 完成后如果没有后续动作,就会自动关闭文件

转载自:https://juejin.cn/post/7376563996424175650
评论
请登录