• Day8 python基础


    一,文件操作初识

    1.文件名

    2.文件路径

       绝对路径:从根目录一层层开始找   

     相对路径:从当前目录开始找

       路径问题报错:

           1、在路径的最前面加r,对每个反斜杠进行转意:r'd:a.txt'

           2、每个都加,变成\,对每个都转意:d:\a.txt

    3.打开方式:只读,只写,写读,读写,追加,等等

    4.编码方式

        Error:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xcf in position 25: invalid continuation byte

        报错原因:编码不一致

    #文件操作初识
    #
    
    f = open('d:护士主妇空姐私密联系方式.txt',encoding='utf-8',mode='r')
    content = f.read()
    print(content)
    f.close()
    
    '''
    f 变量:f_obj,f_handler,f_h,fh,文件句柄
    open():为python的内置的系统函数(内部调用的是windows的系统命令,不同操作系统,python会自动识别并调用)
    流程:
    1.打开文件,产生文件句柄
    2.对文件句柄进行操作
    3.关闭文件句柄
    '''

    二,文件编码

      f=open(...)是由操作系统打开文件,那么如果我们没有为open指定编码,那么打开文件的默认编码很明显是操作系统说了算了,操作系统会用自己的默认编码去打开文件,在windows下是gbk,在linux下是utf-8。

    #若要保证不乱码,文件以什么方式存的,就要以什么方式打开。
    f=open('a.txt','r',encoding='utf-8')

    三,文件的打开模式

    #

    #r:只读 *****
    #对于r模式,mode可以默认不写
    #例:
    f = open('文件操作',encoding='utf-8')
    content = f.read()
    print(content)
    f.close()

    # rb:以字节方式读取读,
    文件操作中凡是带b字母,都是与非文字类文件相关的 ***
    #例
    f = open('美女1.jpg',mode='rb') #rb模式按照字节读取
    content = f.read()
    print(content)
    f.close()

    #r+:读写 *****
    #一般情况:先读后追加
    #注意:
    #不读,光标默认在文件头,后写,会覆盖字符
    #先写后读,光标在文件末,再读,读不出数据
    例:
    f = open('文件操作',encoding='utf-8',mode='r+')
    centent = f.read()
    print(centent)
    f.write('好好好')
    f.close()

    #r+b 以bytes类型操作的读写,写读,写读模式
    #例:
    f = open('文件操作',mode='r+b')
    content = f.read()
    print(content.decode('utf-8'))
    a = '老衲好'
    f.write(a.encode('utf-8'))
    f.close()

    #
    
    #w:只写 ***
    #没有文件,创建文件也要写
    #有文件,先清空,后写入
    #例:
    f = open('文件操作2',encoding='utf-8',mode='w')
    f.write('深圳市南山区,福田区,罗湖区...')
    f.close()
    
    #wb:以字节方式写 **
    f1 = open('美女1.jpg',mode='rb')
    content = f1.read()
    f = open('美女2.jpg',mode='wb')
    f.write(content)
    f1.close()
    f.close()
    
    #w+:写读
    #先清空,后写,光标在文末,再读,无内容
    #w+b:写读,以字节形式
    #追加
    
    #a:追加 ***
    # 没有文件,创建文件也要写。
    # 有文件,直接在文件的最后面追加。
    #例子:
    f = open('文件操作3',encoding='utf-8',mode=a)
    f.write('
    南方水土好')
    f.close()
    
    #ab:以字节形式追加
    #a+ :先追加后读
    #a+b:写读
    文件读取的方法:
    #
    1、read():全部读取
    f = open('文件操作',encoding='utf-8',mode='r')
    content = f.read()
    print(content)
    f.close()
    # 2、read(n):读取n个字符 f = open('文件操作',encoding='utf-8',mode='r')
    content = f.read(10) #读取n个字符,换行符,空格也算字符,r模式按字符读,b模式按字节
    print(content)
    f.close
    # 3、readline():按行读取,读取一行 f = open('文件操作',encoding='utf-8',mode='r')
    print(f.readline())
    print(f.readline()) #光标下移,读取下一行
    # 4,readlines():多行读取 f = open('文件操作',encoding='utf-8',mode='r')
    content = f.readlines() #返回一个list
    print(content)
    f.close
    #5.for 循环,读取时值占用一条的内存,句柄f为可迭代的数据,所以f的最小元素为行 f = open('文件操作',encoding='utf-8',mode='r')
    for line in f: print(line.strip()) f.close()
    # 其他方法:py3.x
    
    # seek 调整光标到开始,seek(0)  调整光标到结尾seek(0,2) *****
    f = open('文件操作1',encoding='utf-8')
    f.seek(6)        # 按照字节去移动光标
    content = f.read()
    print(content)
    f.close()
    
    # fileno()  文件描述符:文件的内存地址
    
    # flush()  刷新:强制保存
    
    # readable() 判断文件句柄是否可读,返回布尔值
    f = open('文件操作1',encoding='utf-8')
    if f.readable():
        content = f.read()
        print(content)
    f.close()
    
    # writealeb()判断文件句柄是否可写,返回布尔值
    f = open('文件操作1',encoding='utf-8')
    if f.writable():
        f.write('123')
    f.close()
    
    #seekable()判断是否可以调整光标,用处不明
    
    #tell()获取光标位置,应用:断点续传*****
    f = open('文件操作1',encoding='utf-8')
    f.seek(0,2) # 按照字节去移动光标
    print(f.tell())
    f.close()
    
    #truncate()在原文件截断数据,仅保持从开头至截取处,
    # 需要支撑写的情况下才能用,writealbe,返回截取的字节数,不能在W模式使用,会先清空原文件,建议r+,a+
    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的深度剖析')
  • 相关阅读:
    HTML基础
    JVM内存和JVM调优(五)--分代垃圾回收详述
    JVM内存和JVM调优(四)--如何区分垃圾
    JVM内存和JVM调优(三)--基本GC垃圾回收算法
    JVM内存和JVM调优(二)--引用类型
    JVM内存和JVM调优(一)--堆栈概念
    isAssignableFrom和instanceof
    spring学习(三十九)--自定义注解
    SPRING学习(三十八)--SPRING集成MYBATIS之数据库连接池和多种数据源配置方式(三)
    SPRING学习(三十七)--SPRING集成MYBATIS(二)
  • 原文地址:https://www.cnblogs.com/lianyeah/p/9470518.html
Copyright © 2020-2023  润新知