zoukankan      html  css  js  c++  java
  • Python文件读写

    Python中打开文件命令 open(),open命令返回文件的一个句柄:如:
    f = open('e:\123.txt')
    
    # read()对打开的文件进行读的操作
    print(f.read())
    
    # 关闭文件,文件打开后一定要记得关闭文件。在写的时候 可以:打开,关闭先写完,再写打开和关闭中间的代码
     f.close()
    
    
    f = open('e:\123.txt') 
    #这段代码,open 没有指定 mode= 参数,默认使用只读的方式打开文件,文件没有写的权限
    f = open('e:\123.txt')
    f.write('hello python')
    f.close()
    上面的代码会报错  io.UnsupportedOperation: not writable

    另外,如果没有使用为open指定 encoding= 参数,计算机默认使用系统的编码方式打开文件。windows下默认为 gbk, linux下默认为utf-8
    文件的打开方式格式: 文件句柄 = open('文件路径',打开模式, 编码方式)
    文件打开方式:
    1.r, 只读的方式打开(文件必须存在,如果文件不存在,则会抛出异常) 注:文件以什么方式编码方式写的,就以什么编码方式打开
    f = open('e:\123.txt',mode='r',encoding='utf-8')
    print(f.read())
    f.close()

    2.w, 只写模式 (文件不可读,如果文件不存在,则创建一个新的文件,如果文件存在,则会清空里面的内容)
    f = open('e:\123.txt',mode='w',encoding='utf-8')
    f.write('hello python!') # 在写的时候,要指定编码的方式
    f.close()

    3.a,只追加写的模式 (文件不可读,不存在则创建新的文件,文件存在的话,可在后面追加内容)
    f = open('e:\123.txt',mode='a',encoding='utf-8')
    f.write('jack is a student')
    f.close()

    对于非文本的文件,使用b的模式。'b'表示以字节的方式进行操作 如:rb,wb,ab 分别对应以上内容,如果以b的方式打开,读取到的内容是字节类型,写入的时候也需要提供字节类型,不能指定编码

    f = open('e:\123.txt',mode='rb') # 指定encoding= 参数 会报错
    print(f.read())  # b'xd6xd0xb9xfa
    f.close()
    以上代码 输出:b'xd6xd0xb9xfa'  如果在写的模式下,写的时候也要以字节的方式进行写

    '+'模式 ---- r+: 读写模式 w+:写读模式 a+:写读模式
    f = open('e:\123.txt',mode='r+',encoding='gbk')
    print(f.read())
    f.write('helo')
    print(f.read()) # 此处在读的时候,就读不到 后面的 hello了,因为,在执行完 write(’hello') 这段代码后,光标移动到了文件的末尾
    f.close()
    在 r+ 模式下,应该先读,后写,如果先写,后读,同样的道理,光标移动到了文件末尾,将读取不到内容

    f = open('e:\123.txt',mode='w+',encoding='gbk')
    f.write('你好,hellopython')  # 清空文件中的内容,然后重新写数据
    f.seek(0)  # 将光标移动到文件开头
    print(f.read())
    f.close()
    f = open('e:\123.txt',mode='a+',encoding='gbk')  # 在 a+ 模式下,将在文件的末尾追加数据,不会覆盖原来的内容
    f.write('
    jack is a student')
    f.seek(0)  # 将光标移动到文件开头
    print(f.read())
    f.close()

    文件读取的其他操作
    很多时候,在读写文件的时候,只是打开文件,open 而忘记关闭文件,close,可以使用简单的方式来操作,使用with open。如:
    l1 = ['静夜思','李白','床前明月光','疑是地上霜','举头望明月','低头思故乡']
    with open('e:\静夜思.txt',mode='w+',encoding='utf-8') as f:
         for l1_data in l1:
             f.write(l1_data + '
    ')    # f.writelines(l1) 可以将列表l1中的内容全部写进去,但是不换行
    
         f.seek(0)  # 将光标放到文件首
         print(f.readlines()) # 逐行读取文件,并将文件按行为元素保存到一个列表中
         f.seek(3)
         index = f.tell() # 获取当前光标的位置
         print(index)  # 打印 3
    关于seek 和 tell 这两个函数
    with open('e:\123.txt',mode='w+',encoding='utf-8') as f:
        f.write('abcdefgh')  # 一共 8 个字符,现在想要读取ef两个字符
        f.seek(4)  # 将光标移动到4的位置,也就是 d 的后面,从e开始读取
        index = f.tell() #获取光标位置
        print(f.read(2),index) # 读取两个字符,将读到 ef
    
    
    with open('e:\123.txt',mode='w+',encoding='utf-8') as f:
        f.write('中国一定强')  # 在文件中写入: 中国一定强  按照 utf-8的编码方式写入
        f.seek(6)   # 将光标移动到位置 6
        index = f.tell()  # 读取光标的位置
        print(f.read(2),index)  # 读取两个字符

    以上代码 输出 :一定 6
    这里需要注意的是:移动光标 seek 以及 读取光标位置 tell 这两个函数,如果是英文字母。则一个字符为一个位置,如果是其他,按照编码方式来指定或者获取位置
    中文 utf-8 的编码方式,一个汉字占用 3 个字节,所以 '中国'占用6个位置 在移动光标,或者获取光标位置的时候 要三个三个的移动
    read 在读取的时候,按照能用眼睛看到的最小单位来读取
  • 相关阅读:
    20210304. 3. 通讯协议及事件处理机制
    20210304. 2. 数据类型与底层数据结构
    20210304. 1. 缓存原理 & 设计
    20210304. 0.3. Redis Cluster 搭建
    20210304. 0.2. Redis 哨兵模式搭建
    20210304. 0.1. Redis 安装
    20210208. Neo4j
    20210207. MongoDB
    20210203 8. 运维和第三方工具
    Global Brain Dynamics Embed the Motor Command Sequence of Caenorhabditis elegans
  • 原文地址:https://www.cnblogs.com/hongyu0518/p/9661655.html
Copyright © 2011-2022 走看看