美文网首页
2021-02-21python之文件打开关闭,读写

2021-02-21python之文件打开关闭,读写

作者: testerPM | 来源:发表于2021-02-21 15:28 被阅读0次

    文件的打开与关闭

    image.png

    打开文件

    (1)打开并读取出文件的全部内容

    helloworld.txt文件内容如下:


    image.png

    file_op.py代码如下:

    #打开文件保存到file变量中
    #打开文件,不穿参数,默认module默认是r ,只读
    file=open("E:\\pythonProject\\helloworld.txt")
    #读取文件内容
    print(file.read())
    打印内容:
    E:\pythonProject\venv\Scripts\python.exe E:/pythonProject/file_op.py
    helloworld
    
    Process finished with exit code 0
    
    
    

    (2)文件打开之后可以做哪些操做??

    image.png

    1)file.name:获取文件名

    file_op.py文件代码如下:

    file=open("E:\\pythonProject\\test.txt","r")
    #获取打开文件的文件名
    print(file.name)
    
    #判断文件是否被挂关闭
    print(file.closed)
    
    ##获取文件的打开的模式是什么
    print(file.mode)
    
    

    打印内容:

    E:\pythonProject\venv\Scripts\python.exe E:/pythonProject/file_op.py
    E:\pythonProject\test.txt
    False
    r
    
    Process finished with exit code 0
    
    注意:
    
    #open()传入的文件可以是绝对路径,也可以直接是一个文件名
    #如果是一个文件名。就从当前操做的文件所在目录下打开这个文件,如果没有这个文件,执行会报错,提示没有这个文件
    file=open("test.txt")
    #获取包含文件名的字符串即open()传入的第一个参数name
    print(file.name)
    打印结果:
    E:\pythonProject\venv\Scripts\python.exe E:/pythonProject/file_op.py
    test.txt
    
    
    
    

    2)file.closed:判断文件是否被关闭,返回布尔值

    file=open("test.txt")
    #判断文件是否被挂关闭
    print(file.closed)
    #关闭文件
    file.close()
    打印结果如下:
    E:\pythonProject\venv\Scripts\python.exe E:/pythonProject/file_op.py
    False
    True
    Process finished with exit code 0
    
    
    

    注意:文件打开操做结束一定要关闭文件,否则会一直占用内存

    3)file.mode:获取文件的打开i模式

    file=open("test.txt")
    #获取文件的打开模式
    print(file.mode)
    
    打印结果:
    E:\pythonProject\venv\Scripts\python.exe E:/pythonProject/file_op.py
    r
    
    Process finished with exit code 0
    

    文件读写

    image.png
    image.png

    1.只读的模式:r

    r是默认的模式。文件的指针将会放在文件的开头(意思是:文件打开后,光标默认定位在文件第一行第一个字符的前面,读取的时候会将光标之后的所有内容都读取出来)
    test.txt文件内容如下:


    image.png

    1)read():不传入参数:默认读取全部

    file=open("E:\\pythonProject\\test.txt","r")
    print(file.read())
    file.closed()
    打印结果:
    E:\pythonProject\venv\Scripts\python.exe E:/pythonProject/file_op.py
    my name is  test
    
    Process finished with exit code 0
    
    

    2)read():传入参数,指定读取几个字符

    #打开文件
    file=open("E:\\pythonProject\\test.txt","r")
    #读取四个字符内容
    print(file.read(4))#结果:my  n
    file.close()
    #再次打开文件
    file=open("E:\\pythonProject\\test.txt","r")
    #读取1个字符内容
    print(file.read(1))#j结果:m
    #读取1个字符内容之后,再读取4个字符内容
    print(file.read(4))#结果:y na
    file.close()
    
    
    

    执行结果:

    E:\pythonProject\venv\Scripts\python.exe E:/pythonProject/file_op.py
    my n
    m
    y na
    
    Process finished with exit code 0
    

    3)文件定位

    image.png

    1. 参考位置为文件开头

       file_op.py文件代码如下:
    
    #打开文件
    file=open("E:\\pythonProject\\test.txt","r")
    #读取四个字符内容
    print(file.read(4))#结果:my  n
    #获取光标所在的位置
    print(file.tell())#结果:4   这里注意:输出的是字节数,英文,数字,空格都是1个字节。所以输出光标所在的位置是4,一个汉字是2个字节,如果全部是汉字,那么就是8
    #光标移动到指定位置
    file.seek(0,0)#光标移动到文件的开头
    print(file.read())#结果:my name is test
    #光标移动到的第四个字符,光标移动参考位置是文件开头
    file.seek(4,0)
    print(file.read())#结果:ame is test
    file.close()
    
    
    

    执行结果如下:

    E:\pythonProject\venv\Scripts\python.exe E:/pythonProject/file_op.py
    my n
    4
    my name is test
    ame is test
    
    Process finished with exit code 0
    
    
    

    2.参考位置为光标当前位置

    file_op.py文件代码如下:
    
    #打开文件
    file=open("E:\\pythonProject\\test.txt","r")
    #读取四个字符内容
    print(file.read(4))#结果:my  n
    #获取光标所在的位置
    print(file.tell())#结果:4   这里注意:输出的是字节数,英文,数字,空格都是1个字节。所以输出光标所在的位置是4,一个汉字是2个字节,如果全部是汉字,那么就是8
    #光标移动2个字符,光标移动参考位置为:光标当前所在位置
    file.seek(2,1)
    print(file.read())#前期结果:e is test
    file.close()
    
    

    执行结果:

    E:\pythonProject\venv\Scripts\python.exe E:/pythonProject/file_op.py
    Traceback (most recent call last):
    my n
    4
      File "E:/pythonProject/file_op.py", line 8, in <module>
        file.seek(2,1)
    io.UnsupportedOperation: can't do nonzero cur-relative seeks
    
    Process finished with exit code 1
    
    

    3.参考位置为文件末尾

    file_op.py文件代码如下:

    #打开文件
    file=open("E:\\pythonProject\\test.txt","r")
    #光标参考位置为,文件末尾
    file.seek(1,2)
    print(file.read())
    file.close()
    
    

    执行结果:与上面一样报错,也会提示:io.UnsupportedOperation错误。

    报错解决办法:打开模式加b,二进制读取

    test.txt内容如下:


    image.png

    file_op.pyd代码更新如下:

    #打开文件
    file=open("E:\\pythonProject\\test.txt","rb")
    #读取四个字符内容
    print(file.read(4))#结果:my  n
    #获取光标所在的位置
    print(file.tell())#结果:4   这里注意:输出的是字节数,英文,数字,空格都是1个字节。所以输出光标所在的位置是4,一个汉字是2个字节,如果全部是汉字,那么就是8
    #光标移动2个字符,光标移动参考位置为:光标当前所在位置
    file.seek(2,1)
    print(file.read())#前期结果:e is test
    file.close()
    
    
    

    代码运行结果:

    E:\pythonProject\venv\Scripts\python.exe E:/pythonProject/file_op.py
    b'my n'
    4
    b'e is  test'
    
    Process finished with exit code 0
    
    

    上面执行结果可以看到:代码不再报io.UnsupportedOperation错误。
    想了解更多的seek()用法。可以参考seek()介绍章节

    2.读写模式:r+

    (1)先写后读

    test.txt文件内容如下:

    image.png

    file_op.py文件代码如下:

    file=open("E:\\pythonProject\\test.txt","r+")
    file.write("new99")
    print(file.read())
    
    

    打印结果如下:
    E:\pythonProject\venv\Scripts\python.exe E:/pythonProject/file_op.py
    me is test

    Process finished with exit code 0

    test.txt文件打开如下:


    image.png

    总结:先写后读,打开文件,未执行读操做,光标定位在文件的开头。新写入的内容会覆盖后面的内容。未关闭文件,就读取文件光标定位在写入内容结束的位置开始往后读取

    (2)先读后写

    test.txt文件内容如下:


    image.png

    file_op.py文件代码如下:

    file=open("E:\\pythonProject\\test.txt","r+")
    print(file.read())
    file.write("is new 123")
    print(file.read())#结果:读取内容为空
    

    执行结果为下:

    E:\pythonProject\venv\Scripts\python.exe E:/pythonProject/file_op.py
    new99me is test

    Process finished with exit code 0

    打开test.txt文件,内容如下:

    image.png

    总结:先读后写。打开文件后,执行读操做,内容读取结束,未关闭文件,此时光标定位在文件内容结束位置。所以此时执行写操做,会从内容最后位置写入,上面代码读取内容之所以为空。因为文件未关闭,光标定位在写入结束的位置开始往后读,所以读取为空

    如下面的代码:file_op.py

    file=open("E:\\pythonProject\\test.txt","r+")
    print(file.read())
    file.write("hello")
    file.close()
    #g关闭后重新打开i读取
    file=open("E:\\pythonProject\\test.txt","r+")
    print(file.read())
    
    

    执行结果:

    E:\pythonProject\venv\Scripts\python.exe E:/pythonProject/file_op.py
    new99me is testis new 123
    new99me is testis new 123hello
    
    Process finished with exit code 0
    
    

    3.只写模式:w

    如果打开的文件存在且有内容,那么会清空原有数据。重新写入新数据

    4.读写模式:w+

    5.追加模式:a

    6.追加模式:a+

    数据流

    一般对于文件和图片这种,我们会选择流的方式,或者也叫比特流

    比如下图代码:打开image.jpg图片是以二进制打开(wb),b代表二进制,如果写w,不加b会报错。
    因为url里面存的图片就是一个数据流,所以要以二进制的形式写入到image.jpg文件中

    image.png image.png

    下图就是写入的图片:

    image.png

    相关文章

      网友评论

          本文标题:2021-02-21python之文件打开关闭,读写

          本文链接:https://www.haomeiwen.com/subject/vejqfltx.html