《0基础》学习Python——第十六讲 __文件读写

<文件读写>

一、什么是文件读写

        文件读写是指在Python程序中对文件进行读取写入操作。通过文件读写,可以读取文件中的数据,或者向文件中写入数据

        Python提供了多种文件读写的方式,其中最常用的方式是使用open()函数打开一个文件,并通过文件对象进行读写操作。文件读写的基本流程如下:

  1. 使用open()函数打开文件,可以指定文件路径、文件打开方式(如读取模式'r'、写入模式'w'、追加模式'a'等),并将返回的文件对象赋值给一个变量。

  2. 使用文件对象的read()方法读取文件内容,可以指定参数来读取指定数量的字符或者全部内容。

  3. 使用文件对象的write()方法写入数据到文件中,可以指定参数为要写入的字符串。

  4. 使用文件对象的close()方法关闭文件释放资源

        除了使用open()函数进行文件读写外,还可以使用with语句来自动管理文件的打开和关闭,以避免忘记关闭文件导致资源泄漏的问题。使用with语句打开文件后,文件会在with块结束后自动关闭。                

        另外,Python还提供了其他一些用于文件读写的函数和方法,如readline()、readlines()writelines()等,可以根据实际需要选择使用。

二、绝对位置、相对位置

        在Python中,绝对位置和相对位置用于描述文件或目录在文件系统中的位置关系。

        绝对位置是指文件或目录在整个文件系统中的具体路径。绝对位置使用完整的路径表示,从根目录开始一直到文件或目录的路径。例如,D:\soft\pycharm\code\pythonProject\123.txt,即从盘符开始一直往内部打开文件知道找到需要打开的文本文件名

        相对位置是指文件或目录相对于当前工作目录的位置关系。当前工作目录是指程序执行时所在的目录。相对位置使用相对于当前工作目录的路径表示。例如,如果当前工作目录是D:\soft\pycharm\code\pythonProject,那么pythonProject\123.txt就是一个相对位置,表示位于当前工作目录下的pythonProject目录下的123.txt文件。

        注意:相对位置存在相对概念 , ./ 表示同级文件夹下, ../ 表示上级目录下,

三、open方法

        open() 函数常用形式是接收两个参数:文件名(file)和模式(mode)

完整形式:
        
参数解释:
        file: 必需,文件路径(相对或者绝对路径)
        mode: 可选,文件打开模式,默认为 r
        encoding: 一般使用utf8编码
        errors: 报错级别
        newline: 区分换行符
        buffering: 设置缓冲
        closefd: 传入的file参数类型

四、常用mode 参数主要有

        'r':只读模式,文件不存在则返回异常
        'w':覆盖写模式,文件不存在则创建,存在则覆盖原文件
        'x':创建写模式,文件不存在则创建,存在则返回异常
        'a':追加写模式,文件不存在则创建,存在则追加写内容
        'b':二进制文件模式,与 r、x、w、a 组合使用,例如:‘rb’,二进制模式读
        't':文本文件模式,与r、x、w、a 组合使用,例如:‘rt’,以文本文件模式读
        '+':与r、x、w、a 一同使用,在原功能上增加同时读写功能,例如:‘r+’以读写模式打开文件。可以读取和写入文件内容。如果文件不存在则返回异常。  "w+":以读写模式打开文件。可以读取和写入文件内容。如果文件不存在,会创建新文件。如果文件存在,会清空文件内容。"a+":以追加读写模式打开文件。可以读取和追加写入文件内容。如果文件不存在,会创建新文件。"x+":以创建读写模式打开文件。可以读取和写入文件内容。如果文件已经存在则打印异常。

五、使用with语句

        由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,可以使用try ... finally来实现:

但每次都这么写实在太繁琐,所以Python引入了with语句来自动调用close()方法

这和try ... finally是一样的,但代码更佳简洁,并且不必调用f.close()方法
注意:with open()打开文件也有他的弊端,如下代码:
if __name__ == '__main__':

    for i in range(10):
        pass
    # with open一个文件不需要关闭文件
    # 如果能够一次性写完 用这个比较好
    with open("./data.txt", "r", encoding="utf8") as fp:
        print(fp.readline(10))
    pass

加入循环之后就会不停地打开关闭,这样对文件会有很大程度的损坏,所以最好是一次性写完写入的文件内容,以防多次打开关闭文件。

六、读文件

        要以读文件的模式打开一个文件对象,使用Python内置的open()函数,传入文件名和标示符:

以下是三种打开文件时地址的格式,因为会有 \n等转义字符

        f = open('C:\\users\\shujia\\desktop\\test.txt', 'r',encoding="UTF-8")

        f = open('C:/users/shujia/desktop/test.txt', 'r',encoding="UTF-8")

        f = open(r'C:\users\shujia\desktop\test.txt', 'r',encoding="UTF-8")

        

        其中c:\\users\\shujia\\desktop\\test.txt表示文件的绝对位置,

        encoding="UTF-8"表示编码方式是UTF-8的形式

        ' r '标示符表示,这样成功地打开了一个文件,如果文件不存在,open()函数就会抛出一个IOError的错误,如果文件成功打开,调用read方法可以把内容读到内存,用一个str对象接收:

f.read() 得到'Hello, world!'文件使用完毕后调用close()方法可以关闭文件:f.close()

假设创建了一个文本文档 123.txt,其绝对路径为D:\soft\pycharm\code\pythonProject\123.txt

内部有这样的一段内容:

那么如果想读取文件内容,就可以用以下代码:

if __name__ == '__main__':

    fp=open(r"D:\soft\pycharm\code\pythonProject\123.txt",'r',encoding='utf-8')#打开文件夹

    print(fp.read(10))#其中的10表示打印的长度,如果不写则打印全部,如果写的很大,则打印全部内容

    fp.close()  #关闭文件夹

其打印结果为:

f.read(size):读取文件f的内容,size为文件长度,不写参数则读取文件全部内容

f.readline(size):读取文件中一行内容,size为该行的长度,不写参数size则读取第一行全部内容

f.readlines(size): 读取文件所用的行,参数表示读取的长度,如果第一行没有超过参数所示长度则打印第二行,以此类推,如果没有超过下一行则打印下一行全部内容,以列表形式返回

f.seek(offset): 改变当前文件操作指针位置,offset为0则为文件开头,为2则为结尾

if __name__ == '__main__':

    fp=open("D:/soft/pycharm/code/pythonProject/123.txt",'r',encoding='utf-8')#打开文件夹

    print(fp.read(10))#其中的10表示打印文件内容的长度,如果不写则打印全部文件内容,如果写的很大,则打印全部内容

    print(fp.readline(10))#表示打印第一行的内容,括号内参数10表示打印字符长度,如果不写则默认打印第一行全部内容

    print(fp.readlines(25))#返回的参数读取文件长度的列表,参数没到一行 读一行  参数超过一行读完下一行
    print(fp.readlines())# 读取所有的行 存入列表中
    fp.close()  #关闭文件夹

七、写文件

        写文件是指向文件中写入数据或内容的操作。在Python中,可以使用write()方法来写入文件。该方法接受一个字符串作为参数,并将其写入文件。写入时,文件指针会自动定位到当前写入的位置,并在写入后移动到下一个位置。

f.write(s)  :把字符串s写入文件f中

f.writelines(a):把列表类型的a中各元素连接起来写入文件

如下两个代码:

lt=['abc','ABC','12345','666']
f=open(f'list1.txt','w',encoding='utf-8') #以w模式创建一个文件夹list1.txt
f.write('-'.join(lt))  #把通过join函数处理过的数据写入列表
f.close()

其输出结果为生成一新的文件夹,写入内容如下:

        list1.txt: 

lt=['abc','ABC','12345','666']
f=open(f'list2.txt','w',encoding='utf-8')#以w模式创建一个文件夹list2.txt
f.writelines(lt)  #直接把列表内的数据全部连接起来写入文件list2.txt
f.close()

其输出结果为生成一新的文件夹,写入内容如下:

        list2.txt:

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 19:58:02       50 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 19:58:02       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 19:58:02       43 阅读
  4. Python语言-面向对象

    2024-07-18 19:58:02       54 阅读

热门阅读

  1. 017.自定义指纹浏览器-传参固定指纹(二)

    2024-07-18 19:58:02       14 阅读
  2. 【时时三省】单元测试 简介

    2024-07-18 19:58:02       17 阅读
  3. 正则表达式

    2024-07-18 19:58:02       17 阅读
  4. 框架

    框架

    2024-07-18 19:58:02      17 阅读
  5. opencv—常用函数学习_“干货“_5

    2024-07-18 19:58:02       20 阅读