zoukankan      html  css  js  c++  java
  • python 文件读写操作(24)

        以前的代码都是直接将数据输出到控制台,实际上我们也可以通过读/写文件的方式读取/输出到磁盘文件中,文件读写简称I/O操作。文件I/O操作一共分为四部分:打开(open)/读取(read)/写入(write)/关闭(close)……

    歪

    一.文件的打开 open

        在python中打开文件使用函数open(),该函数返回文件句柄,具体使用方法如下:

        其中,打开文件模式有以下几种类型:

    open

     

    二.文件的关闭 close

        文件在打开读写之后记得要有关闭操作,就好比蹲完坑得擦屁股,关闭文件使用close()函数。注意:文件关闭之后,不能在继续对文件读写操作,如果需要读写操作需要重新open()打开文件。

    蹲坑

     

    file.close() # 关闭文件

     

    三.文件的读取 read

        文件打开之后,可以通过返回的文件句柄读取文件中的内容,文件读取有以下几个函数:

        1.file.read( [count] ) — count表示需要读取的文字长度,conut是缺省参数,如果没有设置count值,默认读取整个文件所有内容,该函数返回读取到的内容;

        2.file.readline() — 读取文件一行数据,返回读取的内容

        3.file.readlines() — 读取文件的所有行内容,返回读取的所有内容,注意:返回的数据类型是列表,列表中每个数据都是文件中的一行数据;

        4.注意:文件读取返回的内容并非字符串str类型,而是字节类型bytes类型,b’ ‘前缀代表的就是bytes.  

     

        如果想将bytes类型转为字符串直接使用bytes.decode()即可,decode()默认使用utf-8编码;

        假如d:/1.txt中的内容如下:

    @Blog(个人博客地址): shuopython.com
    @WeChat Official Account(微信公众号):猿说python
    @Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!

        文件读取的三种方式示例代码如下:

    # 方法一:
    print("方法一:使用 read() 函数读取txt内容")
    file_object = open("d:/1.txt","rb")
    contents = file_object.read() # 默认读取所有内容
     
    # 读取文件内容,如果文件中含有中文需要decode()解码,否则中文无法显示
    print(contents)
    print("---"*20)
    # 使用decode()解码中文,默认解码格式为utf-8
    print("使用decode()函数解码中文:")
    print(contents.decode())
    file_object.close()
     
    print("***"*20)
    # 方法二:
    print("方法二:使用 readline() 函数读取txt内容")
    file_object = open("d:/1.txt","rb")
    while True:
        contents = file_object.readline()
        print(contents.decode())# 使用decode()解码中文,默认解码格式为utf-8
        if len(contents) == 0: # 读取内容长度为0,读取结束
            break
    file_object.close()
     
    print("***"*20)
    # 方法三:
    print("方法三:使用 readlines() 函数读取txt内容")
    file_object = open("d:/1.txt","rb")
    # readlines() 返回列表,一行数据就是列表中的一个元素
    contents = file_object.readlines()
    # 遍历列表
    for content in contents:
        print(content.decode())# 使用decode()解码中文,默认解码格式为utf-8
    file_object.close()

        输出结果:

    方法一:使用 read() 函数读取txt内容
     
    b'@Blog(xe4xb8xaaxe4xbaxbaxe5x8dx9axe5xaexa2xe5x9cxb0xe5x9dx80): shuopython.com
    @WeChat Official Account(xe5xbexaexe4xbfxa1xe5x85xacxe4xbcx97xe5x8fxb7)xefxbcx9axe7x8cxbfxe8xafxb4python
    @Motto:xe4xb8x8dxe7xa7xafxe8xb7xacxe6xadxa5xe6x97xa0xe4xbbxa5xe8x87xb3xe5x8dx83xe9x87x8cxefxbcx8cxe4xb8x8dxe7xa7xafxe5xb0x8fxe6xb5x81xe6x97xa0xe4xbbxa5xe6x88x90xe6xb1x9fxe6xb5xb7xefxbcx8cxe7xa8x8bxe5xbax8fxe4xbaxbaxe7x94x9fxe7x9ax84xe7xb2xbexe5xbdxa9xe9x9cx80xe8xa6x81xe5x9dx9axe6x8cx81xe4xb8x8dxe6x87x88xe5x9cxb0xe7xa7xafxe7xb4xafxefxbcx81
    '
    ------------------------------------------------------------
    使用decode()函数解码中文:
    @Blog(个人博客地址): shuopython.com
    @WeChat Official Account(微信公众号):猿说python
    @Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
     
    ************************************************************
    方法二:使用 readline() 函数读取txt内容
     
    @Blog(个人博客地址): shuopython.com
    @WeChat Official Account(微信公众号):猿说python
    @Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
     
     
    ************************************************************
    方法三:使用 readlines() 函数读取txt内容
     
    @Blog(个人博客地址): shuopython.com
    @WeChat Official Account(微信公众号):猿说python
    @Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!

     

    四.文件的写入 write

        文件写入可通过函数write()完成,使用比较简单,先看看语法:

        file.write( [bytes] ) — 直接传入 bytes 类型的字符即可,b”   “前缀代表的就是bytes. 使用比较简单,直接上代码:

    file_object = open("d:/2.txt","wb")
     
    # '
    ' 是文件I/O中的换行符,写完文件之后,自动换行
    file_object.write(b"1234567
    ")
    # 注意单引号和双引号的配合使用
    file_object.write(b"file_object.write(b'sad')
    ")
    file_object.write(b"python 
    ")
     
    file_object.close()

        d:/2.txt 的内容如下:

    1234567
    file_object.write(b'sad')
    python

        注意:写入方式“wb” ,每次写入文件都会覆盖上一次的内容,即写入之前的内容会被清空;

     

    五.文件偏移 seek

        有人看了上面read()函数的示例代码可能会觉得频繁的打开和关闭文件会比较麻烦。那么仅仅打开和关闭文件一次,通过文件的偏移也能完成上述功能,文件的偏移使用 seek() 函数 。一般而言,seek()函数和tell()函数都搭配使用:

        1.file.seek([offset],[whence]) — whence 表示偏移的位置,0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起;offset 表示相对whence 偏移多少个字节;

        2.file.tell() — 相对于文件开始位置,当前偏移的字节数,该函数也可以用来计算整个文件的bytes长度;

        注意:一般只要调用read/readline/readlines/write等函数,文件指针会自动发生偏移,使用上面两个函数的示例代码如下:

    file_object = open("d:/2.txt","rb")
     
    # 获取当前的文件偏移,由于还没开始读取内容,偏移量等于 0
    count = file_object.tell()
    print(count)
    # 读取文本所有数据内容,文件自动偏移到文件末尾
    contents = file_object.read()
    # 获取整个文件的偏移量 ,实际上就是文件内容的大小
    count = file_object.tell()
    print(count)
    # 将文件指针偏移到文件开始位置
    file_object.seek(0,0)
    # 读取一行数据,按道理讲应该是获取第一行数据
    contents = file_object.readline()
    print(contents.decode())
    # 获取当前偏移量
    count = file_object.tell()
    print(count)
    # 继续读取一行数据
    contents = file_object.readline()
    print(contents.decode())
    # 获取当前偏移量
    count = file_object.tell()
    print(count)
    file_object.close()

    输出内容:

    0
    474
    python教程 - 猿说python : 第一行数据 www.shuopython.com
    68
    python教程 - 猿说python : 第二行数据 www.shuopython.com
    136

     

    六.重点总结

        1.file.read( [count] )函数可以设置读取指定的长度,例如:只读取10个字符read(10);

        2.file.readlines()返回值是列表,并非bytes类型,而列表中的每一个元素都是文件中的一行数据,类型是bytes类型;

        3.如果文件读取的内容含有中文,需要通过函数decode()解码转为字符串,decode()默认为utf-8解码;

        4.文件open之后记得close,养成良好的书写习惯;

     

     

    猜你喜欢:

        1.python列表推导式

        2.python字典推导式

        3.python return逻辑运算

     

        转载请注明:猿说Python » python文件读写操作

     

    技术交流、商务合作请直接联系博主
    扫码或搜索:猿说python
    python教程公众号
    猿说python
    微信公众号 扫一扫关注
  • 相关阅读:
    Android自动填写获取到的验证码
    java 调用mysql存储过程
    TreeMap按照key排序
    Java中的Map List Set等集合类
    Java 多线程 并发编程
    Linux查看端口、进程情况及kill进程
    采用正则表达式获取地址栏参数:( 强烈推荐,既实用又方便!)
    Wix 安装部署教程(十) --来,用WPF做个漂亮的安装界面
    Jquery Mobile 小结
    岂能尽如人意,但求无愧于心
  • 原文地址:https://www.cnblogs.com/shuopython/p/11908423.html
Copyright © 2011-2022 走看看