zoukankan      html  css  js  c++  java
  • Python Day 8 基础数据类型(文件的操作,文件的常用方法,文件的改)

    Python Day 8

    文件操作

    必要的条件

    1:操作的文件  file

    2:编码  encoding=''

    3:模式  mode=''

    文件操作的流程:

      1.打开文件,产生文件句柄。
      2.对文件句柄进行相应的操作。
      3.关闭文件。

    #凡是带b不用encoding (bytes默认utf-8编码格式)

    #只有是r模式 mode='r'可以省略不写

    基本操作方法:

    f = open('文件名',encoding='编码',mode='r')  #变量:f1_obj,f1_file,file,file_handle... 文件句柄。open Python的内置函数,但是底层调用的windows系统的open功能,open功能就是操作文件用的。windows系统默认的编码方式gbk,linux,macos:utf-8.
    print(f.read())   #不能缩进

    f.close()

    简化操作方法:

    with open('aaa.txt',encoding='utf-8',mode='r') as f1:  #不用主动关闭 f1.close()
        print(f.read())
        pass
        f1.close()   #嵌套操作打开多个文件可以主动关闭
        with open('bbb.txt',encoding='utf-8',mode='w') as f2:
            f2.write('hello')
    with open('log1', encoding='utf-8') as f1,
        open('log2',encoding='utf-8', mode='w') as f2:
        print(f1.read())
        f2.write('666')

    文件操作模式:

    读  r   

    r模式:read(n) n 是按照字符读取。
    rb模式:read(n) n 是按照字节读取。

      1、r 只读 (5种读取方法)

    
    1、for循环 最好的  (文件句柄是一个可迭代对象,使用for循环读取时每次只占用一次内存,适用于读取大文件)
    
    2、f.read()    (一次性全部读出来,加载到内存当中。缺点受限于内存,大文件读取会受影响)
    
    3、f.read(n)    (按字符读取。缺点不方便)
    
    4、f.readline()    (按行读取,一次读取一行。缺点多行时,需要重复很多次。)
    
    5、f.readlines()    (一次读取全部,形成列表,一行是一个元素。缺点受限于内存,大文件读取受影响)

      2、rb 只读b模式(读取非文字类文件(图片,视频,音频))

      3、r+  读写,先读后写

      4、r+b 读写b模式,b模式的先读后写

    =============================================================

    写  w    (没有文件,创建文件写内容。如果有文件,清空原文件,写入新内容。)

      1、w 只写

      2、wb 只写b模式

      3、w+ 写读,先写后读

      4、w+b 写读b模式,b模式的先写后读

    =============================================================

    x, 只写模式【不可读;不存在则创建,存在则报错】

    =============================================================

    追加  a   (没有文件,创建文件写内容。如果有文件,在文件原内容最后,追加写入新内容。)

      1、a 只追加

      2、ab 追加b模式

      3、a+  追加可读

      4、a+b 追加可读b模式

     补充: gbk utf-8

    对于字母,数字,特殊字符的编码都是引用ascii码,所以可以直接转化。
    s1 = '123abc*'
    b1 = s1.encode('utf-8')
    s2 = b1.decode('gbk')
    print(s2)

    文件操作常用方法

    read()  :读取

    1 f1 = open('aaa.txt',encoding='utf-8')
    2 print(f1.read())
    3 f1.close()
    4 
    5 with open('aaa.txt',encoding='utf-8') as f2:
    6     print(f2.read())
    read()

    write()  :写入

    1 f1 = open('aaa.txt',encoding='utf-8',mode='w')
    2 f1.write('老男孩')
    3 f1.close()
    4 
    5 with open('aaa.txt',encoding='utf-8',mode='w') as f2:
    6     f2.write('小男孩')
    write()

    read(n)  :一次读取多个字符

    1 f1 = open('aaa.txt',encoding='utf-8',mode='r')
    2 print(f1.read(3))
    3 f1.close()
    4 
    5 with open('aaa.txt',encoding='utf-8',mode='r') as f2:
    6     print(f2.read(3))
    read(n)

    readline()  :一次读一行,多行需要读取多次

    1 f1 = open('aaa.txt',encoding='utf-8',mode='r')
    2 print(f1.readline())
    3 print(f1.readline())
    4 f1.close()
    5 
    6 with open('aaa.txt',encoding='utf-8',mode='r') as f2:
    7     print(f2.readline())
    8     print(f2.readline())
    readline()

    readlines()  :一次性读取全部,生成列表,每一行是列表的一个元素。

    f1 = open('aaa.txt',encoding='utf-8',mode='r')
    print(f1.readlines())
    f1.close()
    
    with open('aaa.txt',encoding='utf-8',mode='r') as f2:
        print(f2.readlines())
    
    ================
    ['小男孩
    ', 'ok
    ', '123
    ', 'aaa']
    ['小男孩
    ', 'ok
    ', '123
    ', 'aaa']
    readlines()

    seek(0)  :移动光标,按照字节去调整光标   seek(0,2) 光标调整到最后

    tell()  :告诉光标位置

    1 f1 = open('aaa.txt',encoding='utf-8',mode='a')
    2 print(f1.tell())   #0 初始光标位置,追加从末尾开始
    3 print(f1.write(''))  #4 返回写入字符个数
    4 print(f1.tell())    #4  当前光标位置
    5 f1.seek(0)   #移动光标 到0字节处
    6 print(f1.tell())   #0
    7 f1.close()
    seek(),tell()

    readlable()  :判读是否可读

    1 f1 = open('aaa.txt',encoding='utf-8',mode='a')
    2 print(f1.readable())
    3 f1.close()
    4 
    5 返回bool
    readable

    writable()   :判断是否可写

    1 f1 = open('aaa.txt',encoding='utf-8',mode='w')
    2 print(f1.writable())
    3 f1.close()
    writable()

    truncate(3)  :对原文件进行截取内容,以字节形式截取保留,只能再a模式下使用。

    f1 = open('aaa.txt',encoding='utf-8',mode='a')
    f1.truncate(3)
    f1.close()
    
    
    aaa.txt 
    
    aaa123bbb
    
    ===============
    aaa
    View Code

    文件的改

    改的流程

    1,打开原文件 old_file,将原内容读取到内存。
    2,创建一个新文件new_file。
    3,将原内容通过你修改,形成新内容,写入到新文件。
    4,将原文件删除。
    5,将新文件重命名成原文件。

    方法一: read读取,一次性修改。

    import os
    with open('aaa.txt',encoding='utf-8') as f1 ,   #打开原文件
            open('.swap.aaa.txt',encoding='utf-8',mode='w') as f2:  #创建新文件
                a = f1.read().replace('aaa','bbb')  #一次性读取,修改原文件内容
                f2.write(a)  #将修改后的全部内容,写入新文件。
    os.remove('aaa.txt')   #删除原文件
    os.rename('.swap.aaa.txt','aaa.txt')  #将新文件重命名为原文件名。

    方法二: for循环读取按行修改。

    import os
    with open('aaa.txt',encoding='utf-8') as f1,    #打开原文件
        open('.aaa.txt',encoding='utf-8',mode='w') as f2:  #打开一个新文件
        for line in f1:         #按行读取原文件
            line = line.replace('aaa','bbb')    #替换每一行的文件内容
            f2.write(line)             #每行写入一次
    os.remove('aaa.txt')      #文件写入完成后删除原文件
    os.rename('.aaa.txt','aaa.txt')         #新文件重命名为原文件名
  • 相关阅读:
    mybatis
    Hello mybatis
    linux各种终端类型的区别和概念
    页面对象的定位
    laravel 操作 redis
    Python应用与实践
    Mysql与Oracle区别
    PHP 中 call_user_func 函数 和 call_user_func_array 函数的区别
    php依赖注入
    Linux/Unix 怎样找出并删除某一时间点的文件
  • 原文地址:https://www.cnblogs.com/eailoo/p/9008770.html
Copyright © 2011-2022 走看看