zoukankan      html  css  js  c++  java
  • python文件的操作

    1.打开文件的基本结构

    1.打开文件
    f = open('d:\1.txt',mode='r',encoding='gbk')
    参数说明:
    f为文件句柄,f可命名为变量f_obj,f_handler,f_h,fh,文件句柄。
    open为python的内置系统函数
    open(参数1,参数2,参数3)
    参数一:为文件路径+文件,如果文件中出现反斜杠经常会报路径错误
    解决办法有两种:一个是在再加入一个反斜杠,\将反斜杠转义
    第二种:在路径前加入一个r字符
    参数二:采用哪种模式打开:读r,写w,读写rw,写读wr,追加等、
    如果是读r模式可以将该参数省略,默认为读模式
    参数三:编码模式(gbk,utf-8,gb21312等),如果编码模式不正确,则会报错
    2.读取文件句柄
    data =f.read() 在内存中读取

    3.关闭文件句柄
    f.close() 读取完文件必须将文件在内存中关闭

    2. 打开文件的模式有(默认为文本模式):
    r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
    w,只写模式【不可读;不存在则创建;存在则清空内容】
    a, 只追加写模式【不可读;不存在则创建;存在则只追加内容】

    2. 对于非文本文件,我们只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式)
    rb
    wb
    ab
    注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码

    3,‘+’模式(就是增加了一个功能)
    r+, 读写【可读,可写】
    w+,写读【可写,可读】
    a+, 写读【可写,可读】

    4,以bytes类型操作的读写,写读,写读模式
    r+b, 读写【可读,可写】
    w+b,写读【可写,可读】
    a+b, 写读【可写,可读】
    文件的读写追加常用方法:
    读:
    读的四种模式:
    r ***** 读
    rb *** 以bytes形式读
    r+ ***** 读写
    r+b 以bytes类型操作读写【可读,可写】
    对于非文本文件,我们只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式)
    文件的r读取的五种方法:
    方法一:全部读取
    f = open(r'd:1.txt',mode='r',encoding='gbk')
    data = f.read()     #如果read()括号中不加任何参数,则为将文件全部打开,如果文件过大,或内存不足,死机
    print(data)
    f.close()
    方法二:按字节数读取
    f = open(r'd:1.txt',mode='r',encoding='gbk')
    data = f.read(6)        #f.read(n) n的参数是读取几个字节
    print(data)
    f.close()
    方法三:按行读取
    f = open(r'd:1.txt',mode='r',encoding='gbk')
    data = f.readline(4500)     #只读取一行,()中的参数也是一字节打印
    print(data)
    f.close()
    方式四:方法用于读取所有行(直到结束符 EOF)并返回列表,该列表可以由 Python 的 for... in ... 结构进行处理。
    # 如果碰到结束符 EOF 则返回空字符串,读取大文件会比较占内存
    f = open(r'd:1.txt',encoding='gbk',mode='r')
    data = f.readlines()
    print(data)
    f.close()

    方式五:for循环输出每一行

    f = open(r'd:1.txt',mode='r',encoding='gbk')
    for i in f:
    print(i.strip())
    f.close()
    rb读模式:以bytes模式读取文件,这种方式是为了打开非文本文件(如图片,音频)
    f = open(r'd:表情.jpg',mode='rb')    #此时注意不需要写编码模式,因为全部以bytes方式打开
    data =f.read()
    print(data)
    f.close()
    r+ 读写:先读后追加
    f = open(r'd:1.txt',encoding='gbk',mode='r+')
    data = f.read()
    data1 = f.write('你好')   #返回字符串长度
    f.close()
    print(data)
    print(data1)
    读取的几种情况:
    1.无论是read(5)还是readline()读取的位置在哪,都是在文件最后写入内容
    f = open(r'd:1.txt',encoding='gbk',mode='r+')
    data = f.read(5)
    f.write('line测试')
    f.close()
    print(data)
    2.如果在r+模式下,不读直接写,会将源文件覆盖写入新内容
    f = open(r'd:1.txt',mode='r+',encoding='gbk')
    f.write('不写只读,则直接从开头覆盖写入新内容')
    f.close()
    rb模式
    以bytes字节方式读
    f= open(r'd:1.txt',mode='rb')
    data=f.read()
    f.close()
    print(data)
    r+b模式
    #以bytes类型读写
    f = open(r'd:1.txt',mode='r+b')
    data = f.read()
    f.write(b'\xb2)
    f.close()
    print(data)
    写:
    没有文件,创建文件也要写。
    有文件,先清空,后写入
    w模式:写入模式1.清空源文件内容,写入新内容;2.如果文件不存在创建新文件然后写入内容
    f = open(r'd:2.txt',encoding='gbk',mode='w')
    # data =f.read()       在w写入模式前后都不能加入读
    f.write('写入的新内容')
    f.close()
    w+模式:写读模式:只要文件不在就创建新文件
    f = open(r'd:3.txt',encoding='gbk',mode='w+')
    f.write('先写入,后读取') #先写入后读取,光标在最后,所以读取内容为空
    f.seek(0)                   #可以通过调整光标来定向显示的内容
    data=f.read()
    print(data)
    f.close()
    wb模式:以bytes模式写
    f = open(r'd:表情.jpg',mode='rb')
    content = f.read()
    f1 =open(r'd:写真1.jpg',mode='wb')
    f1.write(content)
    f.close()
    f1.close()
    常犯错误:写入编码格式encoding;2,两边必须是对等以bytes的rb读,rb写,否则后报错。
    w+b模式:以bytes写读
    追加:a
    没有文件,创建文件也要写。
    有文件,直接在文件的最后面追加。
    f = open('文件操作3', encoding='utf-8',mode='a')
    f.write('
    南方水土好。。。')
    f.close()
    ab  a+ a+b
    其他方法:readale ,writable,seek
    f = open('文件操作1',encoding='utf-8')
    if f.writable():
        content = f.read()
        print(content)
    f.close()
    seek 调整光标到开始,seek(0)  调整光标到结尾seek(0,2) 
    f = open('文件操作1',mode='rb')
    print(f.read())
    f.seek(6) # 按照字节去移动光标
    content = f.read()
    print(content)
    f.close()
    tell 告知光标的位置
    f = open('文件操作1',encoding='utf-8')
    f.seek(0,2) # 按照字节去移动光标
    print(f.tell())
    f.close()
    truncate 要在writable模式下进行截取。
    r+ a+ ..不能在w模式下使用,对原文件进行截取
    f = open('文件操作1',encoding='utf-8',mode='r+')
    print(f.truncate(6))
    f.close()
    1,主动关闭文件句柄
    with open('文件操作2',encoding='utf-8') as f1:
        print(f1.read())
    2,开启多个文件句柄。
    with open('文件操作2',encoding='utf-8') as f1,
            open('文件操作3',encoding='utf-8',mode='w') as f2:
        print(f1.read())
        f2.write('666666')
    文件的改的操作
    1,以读的模式打开原文件,产生一个文件句柄f1.
    2,以写的模式创建一个新文件,产生一个文件句柄f2.
    3,读取原文件内容,进行修改,并将修改后的写入新文件。
    4,将原文件删除。
    5,将新文件重命名成原文件。
    # low版
    import os
    with open('alex的深度剖析', encoding='utf-8') as f1,
        open('alex的深度解析.bak',encoding='utf-8',mode='w') as f2:
        old_content = f1.read()
        new_content = old_content.replace('alex','SB')
        f2.write(new_content)
    os.remove('alex的深度剖析')
    os.rename('alex的深度解析.bak', 'alex的深度剖析')
    #高级版
    import os
    with open('alex的深度剖析', encoding='utf-8') as f1,
        open('alex的深度解析.bak',encoding='utf-8',mode='w') as f2:
        for line in f1:
            new_line = line.replace('SB','alex')
            f2.write(new_line)
    os.remove('alex的深度剖析')    #移除路径+文件名
    os.rename('alex的深度解析.bak', 'alex的深度剖析')   #rename(old文件名,新文件名)
    View Code

     





  • 相关阅读:
    Redis 查看、删除keys
    gitlab 备份和恢复
    gitlab的搭建
    certbot 域名续期及证书查看
    晴天(周杰伦)
    SSH Permission denied (publickey,gssapi-keyex,gssapi-with-mic)
    jenkins miaration section 1
    jenkins 忘记管理员密码
    Yangk's-树状数组 模板
    codeforces-977F-Consecutive Subsequence【动态规划】
  • 原文地址:https://www.cnblogs.com/qilin610/p/9513964.html
Copyright © 2011-2022 走看看