zoukankan      html  css  js  c++  java
  • Python文件操作之把臂入林

    文件操作

    1、打开文件
    open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
    file:文件的路径。
    mode:打开文件的模式,默认只读。
    buffering:文件的缓冲策略。
    encoding:文件解码方式(必须是在字符串模式)。
    errors:当编码错误时的提示信息(只能在文本模式)。
    newline:控制换行方式,在行的末尾是None, '', ' ', ' ', and ' '。
    closefd:如果closefd为False,底层文件描述符将保持打开状态,当文件关闭时或者给定文件名时,此方法无效,在这种情况下必须是真的。

    下面是读取文件示例:如果文件不存在会报错。

    file_open = open("test1.txt",mode="rb")
    print(file_open.read())
    file_open.close()
    
    # 打印内容如下:
    FileNotFoundError: [Errno 2] No such file or directory: 'test1.txt' 

    文件读取的操作

    test.txt文件内容如下:

    readline(limit:int):如果不写参数默认读取一整行,如果填写参数将限制读取的字符个数,返回一个str。

    file_open = open("test.txt",mode="r",encoding="utf-8")
    print(file_open.readline()) # 不写参数读一整行
    file_open.close()
    
    # 打印内容如下
    上海滩

    readline(limit:int)int为2时读取两个字符。

    file_open = open("test.txt",mode="r",encoding="utf-8")
    print(file_open.readline(2)) # 写参数2读取两个字符
    file_open.close()
    
    # 打印内容如下:
    上海

    readlines(hint:int):不写参数默认读取所有内容,返回一个列表,如果指定参数,经个人测试如果参数的int值不超过文件一行的内容,将显示1行。如果参数的int值超过一行的内容,将显示一二两行,如果参数的int值大于两行的内容将显示三行,以此类推。
    下面是不带参数的事例:

    file_open = open("test.txt",mode="r",encoding="utf-8")
    print(file_open.readlines())
    file_open.close()
    
    # 打印内容如下:
    ['上海滩
    ', '射雕英雄传
    ', '侠客行']

    下面是带参数的事例:

    file_open = open("test.txt",mode="r",encoding="utf-8")
    print(file_open.readlines(3)) # 参数设置3
    file_open.close()
    
    # 打印内容如下:
    ['上海滩
    ']    # 参数3没有超过第一行文件的个数所以只显示一行
    
    file_open = open("test.txt",mode="r",encoding="utf-8")
    print(file_open.readlines(4))  # 参数设置4
    file_open.close()
    
    # 打印内容如下:
    ['上海滩
    ', '射雕英雄传
    '] # 参数4超过了一行内容,所以显示两行.

    read(int):不写参数默认读取所有文件内容,

    file_open = open("test.txt",mode="r",encoding="utf-8")
    print(file_open.read()) # 不写参数的read()
    file_open.close()
    
    # 打印内容如下:
    上海滩
    射雕英雄传
    侠客行
    
    file_open = open("test.txt",mode="r",encoding="utf-8")
    print(file_open.read(3)) #带参数的read(3)
    file_open.close()
    
    # 打印内容如下:
    上海滩 # 打印三个字符 

    由上面的打印可以知道,如果打开文件的模式是文本模式读取三个字符

    file_open = open("test.txt",mode="rb") 
    print(file_open.read(3)) # 带参数的read(3)
    file_open.close() 
    
    # 打印内容如下:
    b'xe4xb8x8a' # 打印三个字节

    当以字节码模式读取文件时,则读取的是三个字节。

    文件的写入

    覆盖写 mode="w"

    file_write = open("test_1.txt",mode="w",encoding="utf-8")
    file_write.write("我是写入的") # 
    file_write.close()

    效果如下:

    mode = "w"模式是覆盖写的操作,如果文件存在将删除原文件,新建一个同名的文件后在执行写的操作。如果原文件不存在执行新建的操作。

    文件的追加操作:mode="a"

    file_append = open("test.txt",mode="a",encoding="utf-8")
    file_append.write("我是追加的")
    file_append.close()

    效果如下:

    文件操作的几种模式:

    r :只读(文本模式读取文件)。
    a :追加写,文件的末尾追加。
    w :覆盖写,先清空文件,后写入文件。
    rb 、wb、ab是以字节的方式操作文件,所以不需要加encoding对字节进行编码的操作。

    a+ :追加写 + 读 (注意 :此模式先追加在读,所以在追加写后,光标是在文件的末尾,如果想要读文件,需要将光标移动到要读取的位置进行读取)。
    w+: 覆盖写 + 读 (注意 :此模式先覆盖写在读,所以在覆盖写后,光标是在文件的末尾,如果想要读文件,需要将光标移动到要读取的位置进行读取)。
    r+ :读 + 写 。

    文件的其它操作:

    seek():移动光标(移动光标是按字节移动,不是按字符移动)。
    seek(0,0):移动光标到文件开头。
    seek(0,1):移动光标到当前位置。
    seek(0,2):移动光标到文件末尾。

    tell():查看光标当前位置(是字节码)。
    truncate():截断光标以后所有数据,只保留光标前面的数据。

    文件的删除、重命名操作:

    重命名:rename(源文件名,从命名后的文件名)。
    import os
    os.rename("test.txt","test1.txt")

    删除:remove(文件名)。
    import os
    os.remove("test1.txt")

    路径:

    文件的路径分为相对路径和绝对路径。
    相对路径:相对于当前目录下进行文件查找(./是当前目录, ../是上一层目录)。
    绝对路径:是从文件的根目录开始一层一层的进行查找,Python中使用绝对路径。例如:
    G:feiqRecv Files est.txt
    因为""在字符串中有特殊意义,所以文件路径中的""不能被识别,下面是两种识别绝对路径的方法。

    第一种在路径前面加上r来
    file_read = open(r"G:feiqRecv Files est.txt",mode="r",encoding="utf-8")

    第二种是使用"\"用转移符的方式
    file_read = open("G:\feiq\Recv Files\test.txt",mode="r",encoding="utf-8")

    关于open(...)打开文件后,必须要有个close()来关闭文件句柄。否则会造成内存泄漏。

    可以使用with上下文管理的方式操作文件,下面是两种方式的对比:

    # 使用with open()的方式操作文件
    with open(r"test.txt",mode="r",encoding="utf-8") as file_read:
        file_read.read()
    
    # 使用open()的方式操作文件
    file_read = open("test.txt",mode="r",encoding="utf-8")
    file_read.read() 
    file_read.close() # 使用文件句柄后要关闭文件句柄

    下一篇:初识函数:https://www.cnblogs.com/caesar-id/p/10291376.html

  • 相关阅读:
    How Many Answers Are Wrong(带权并查集)
    Dice
    Plants vs. Zombies(二分好题+思维)
    Marriage Match IV(最短路+网络流)
    Treasure Hunt
    The Doors(几何+最短路,好题)
    90. Subsets II
    89. Gray Code
    88. Merge Sorted Array
    87. Scramble String
  • 原文地址:https://www.cnblogs.com/caesar-id/p/10266313.html
Copyright © 2011-2022 走看看