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

    介绍:

    计算机系统分为:计算机硬件,操作系统,应用程序三部分。

    我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周知,应用程序是无法直接操作硬件的,这就用到了操作系统。操作系统把复杂的硬件操作封装成简单的接口给用户/应用程序使用,其中文件就是操作系统提供给应用程序来操作硬盘虚拟概念,用户或应用程序通过操作文件,可以将自己的数据永久保存下来。

    有了文件的概念,我们无需再去考虑操作硬盘的细节,只需要关注操作文件的流程:

    #1. 打开文件,得到文件句柄并赋值给一个变量
    #2. 通过句柄对文件进行操作
    #3. 关闭文件
    #1. 打开文件,得到文件句柄并赋值给一个变量
    f=open('a.txt','r',encoding='utf-8') #默认打开模式就为r
    
    #2. 通过句柄对文件进行操作
    data=f.read()
    
    #3. 关闭文件
    f.close()

    了解文件操作模式:

    1、读模式

    • f.read()
    • f.readable()#这个文件是否可读,返回布尔值;
    • f.readline(“读模式”)#读取第一行;f.readlines(“读模式”)#读取所有内容 以字符串方式存储在列表内;

    2、写模式

    • f.write('写模式')   #注意写之前会清空原文本文件,然后进行写入! 若没有文件则会新创建一个文件进行写入;
    • f.write("写模式1 写模式2 写模式3 写模式4 ")   #换行写入;
    • f.writelines(["写模式1 写模式2 写模式3 写模式4 "])   #该模式要传入的数据类型必须是列表;
    • f.writable()  #这个文件是否可写,返回布尔值;
    f = open('小重山','w',encoding='utf-8') #第一个参数是文件位置,第二个参数是写模式,第三个参数是定义编码
    data = f.write('写模式')
    print(data)
    f.close()
    #注意 写之前会清空原文本文件,然后进行写入!  若没有文件则会新创建一个文件进行写入
    
    
    f = open('name','w',encoding='utf-8') #第一个参数是文件位置,第二个参数是写模式,第三个参数是定义编码
    data = f.write("写模式1
    写模式2
    写模式3
    写模式4
    ")
    print(data)
    f.close()
    写模式1
    写模式2
    写模式3
    写模式4
    f.writelines(["写模式1
    写模式2
    写模式3
    写模式4
    "])#该模式要传入的数据类型必须是列表
    
    f = open('小重山','a',encoding='utf-8') # a 代表 append 追加 不会清空原文件
    data = f.write('写模式')
    print(data)
    f.close()
    View Code

    3、r+ , w+ , a+模式

    with:

    同时管理多个文件对象

    with open('log1','r') as f_read, open('log2','w') as f_write:
         for lien in f_read:
             f_write.write(lien)
    View Code

    操作方法总结:

    #1. 打开文件的模式有(默认为文本模式):
    r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
    w,只写模式【不可读;不存在则创建;存在则清空内容】
    a, 之追加写模式【不可读;不存在则创建;存在则只追加内容】
    
    #2. 对于非文本文件,我们只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式)
    rb 
    wb
    ab
    注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码
    
    #3. 了解部分
    "+" 表示可以同时读写某个文件
    r+, 读写【可读,可写】
    w+,写读【可读,可写】
    a+, 写读【可读,可写】
    
    
    x, 只写模式【不可读;不存在则创建,存在则报错】
    x+ ,写读【可读,可写】
    xb
    View Code
    f = open("name","rb")
    date = f.read()
    #字符串------------>>>encode----------->>>bytes
    #bytes------------>>>encode----------->>>字符串
    print(date)
    print(date.decode("utf-8"))

    4、文件修改过程实质上就是覆盖的过程

    #1、将要修改的文件从硬盘读取到内存中
    #2、在内存中修改文件
    #3、把修改后的文件覆盖到硬盘中

    #普通版
    f = open("name","r",encoding="utf-8")
    date = f.readlines()#读取所有内容 以字符串方式存储在列表内
    f.close()
    t = open("小重山","w",encoding="utf-8")
    t.write(date[1]) #通过切片的方式将列表内容取出并写到文件中
    t.close()
    #升级版
    with open("name","r",encoding="utf-8") as f,
            open("小重山","w",encoding="utf-8") as t:  #(as f)等价于(f=),斜杠回车换行
        date = f.readlines()
        f.close()
        t = open("小重山", "w", encoding="utf-8")
        t.write(date[0])
        t.close()
    View Code

     5、文件的其他操作

    • 文件内光标的移动:

        注意:read(3)代表读取3个字符,其余的文件光标移动都是以字节为单位如seek,tell,truncate

    # f = open("name","r+",encoding="utf-8",newline="")#去掉回车键的处理显示原值
    ;
    # deta = f.read(3)#以字符方式读取
    # print(f.tell())
    # f.seek(12)#以字节方式调整光标的位置,(在windows系统中(/r/n)表示回车换行)
    # print(f.tell())#以字节方式读取光标的位置
    # print(f.readlines())
    # print(f.truncate(3))#文件截取实际就是在写文件必须用(r+,a+)
    # f.flush() #把缓存里的数据更新到磁盘上(防止程序崩溃数据丢失)作用于终端

    seek的高级用法:
    seek("光标的参数",0)#正序,默认从0开始数 seek(10,0)=seek(10)
    seek("光标的参数",1) #相对位置,相对于光标上次停在的位置 seek(10,1)
    seek("光标的参数",2)#倒序,从文件的最后一个字符开始数,seek(-10,2)
    a = [1234,456,"dasfgf","we2","xdfcgbhjk","234567"]
    print(len(a)) #查看列表的长度
    print(a[-1]) #提取列表中的最后一行
    
    
    #需求:读取日志文件的最后一行。
    f = open("name","rb")#以字节的方式读取
    for i in f: #直接从文件中遍历,要一行取一行,不占内存;
        #print(i.decode("utf-8"))#解码
        offs = -10  #定义偏移量
        while True:
            f.seek(offs,2)  #倒序,从最后一行开始数,
            data = f.readlines() #将光标移动到的所有字符转换成列表
            if len(data) > 1: #判断列表的长度
                print("文件的最后一行是: %s" %(data[-1].decode("utf-8")))#取列表的最后一行
                break
            offs*=2 #如果最后一行没有取完则重新定义偏移量,知道len(data)>1;
    View Code
     
    f = open('小重山','r',encoding='utf-8') #第一个参数是文件位置,第二个参数是写模式,第三个参数是定义编码
    number = 0
    for i in f:   #这里for内部将f做成一个迭代器,用一行取一行,用完清空,不占内存
        number += 1
        if number == 2:
            i = ''.join([i.strip() , 'oooo'])
        print(i.strip())
    f.close()
    
    
    print(f.tell(3))  #打印光标的位置 对于英文字符就占一个,中文字符占3个;
    
    print(f.seek(3))  #调整光标位置的
    
    
    f.flush() #把缓存里的数据更新到磁盘上(防止程序崩溃数据丢失)
    
    
    >>> f = open('hello','w')
    >>> f.write('alex is 35 ')11
    >>> f.write('hello world')11
    >>> f.flush() 
    alex is 35 hello world
    
    #进度条效果展示
    
    import sys,time
    
    for i in range(30):  #第一种方法
        sys.stdout.write('=')
        sys.stdout.flush()
        time.sleep(0.1)
    
    
    for i in range(30):  #第二种方法
        print('=',end='',flush=True)
        time.sleep(0.1)
    f.truncate()# 截取字符
    
    f = open('小重山','a',encoding='utf-8')
    f.write('asfzxc')
    f.truncate(5)
    View Code
  • 相关阅读:
    第三章web安全基础—IIS发布网站(其中包括服务器IIS搭建、DNS搭建)
    第三章web安全基础—web系统架构
    第二章网络协议安全—网络协议看安全
    第一章信息收集—漏洞利用框架metasploit基本实用
    第一章信息收集—漏洞扫描awvs和appscan
    第一章信息收集—扫描技术与抓包分析
    Pikachu——Unsafe Fileupload不安全文件上传
    Pikachu——Unsafe Filedownload 不安全的文件下载
    Pikachu——File Inclusion(文件包含)
    拿什么拯救你,红果果的小磁盘?
  • 原文地址:https://www.cnblogs.com/songzhixue/p/9942069.html
Copyright © 2011-2022 走看看