zoukankan      html  css  js  c++  java
  • python文件处理

    文件处理

    什么是文件处理

    修改存储的信息

    什么是文件

    操作系统提供的虚拟概念,存储信息(用二进制存储信息)

    操作文件的流程

    1.打开文件

    f=open(r'D:上海python12期视频python12期视频day 09	est.py','w',encoding='utf-8')
    

    2.修改/读取文件

    f.write('''
    孩儿立志出湘关,学不成名誓不还
    埋骨何须桑之地,人生无处不青山
    ''')
    

    3.保存文件

    f.flush()#快速保存,可以不使用
    

    4.关闭文件:python是通过操作系统操作文件

    f.close()#告诉操作系统关闭文件
    

    文件的三种打开模式

    读取:rt read_text 读取文本内容 只读

    f=open(r'D:上海python12期视频python12期视频day 09	est.py','rt',encoding='utf-8')
    data=f.read()#读取所有文本内容
    print(data)
    print(f.readable())#判断是否可读
    print(f.writeable())#判断是否可写
    

    仅作了解

    print(f.readline())#一行一行读取
    print(f.readlines())#读取所有行放入列表
    

    循环读出文本内容

    for i in f.read():#循环出一个个字符
        print(i)
    for i in f:
        print(i)#循环出一行行,每行末尾默认有一个换行
    

    wt: 清空写入,不可读

    f.write('abc')
    

    仅作了解

    f.writelines(['asd','dgg','werf'])#自动拼接列表元素,一行写入
    

    at: 追加写入

    f=open(r'D:上海python12期视频python12期视频day 09	est.py','rt',encoding='utf-8')
    f.writeable('中')
    

    打开文件的两种方式

    t-->文本 b-->二进制模

    这两个东西不单独使用,一般与r/w/a联用,不需要encoding

    b模式一般用于图片/音频/视频的保存

    绝对路径和相对路径

    文件的路径:文件在硬盘的地址

    绝对路径

    从盘符开始 D:上海python12期视频python12期视频day 09 est.py

    相对路径

    执行文件(当前运行的文件)的文件夹下的文件名,执行文件和打开文件属于同一文件夹下

    未来尽量使用相对路径

    f=open('test.py','r',encoding='utf-8')
    print(f.read())
    

    with管理文件上下文

    with提供一个自动关闭文件(结束了操作系统的占用)

    with open('test.py','r',encoding='utf-8') as f:
        #在这个缩进下不会关闭文件,在这个缩进下对文件操作
        data=f.read()#data放在python的内存中
    print(data)#关闭文件(操作系统),没有关闭Python内存中的文件
    print(f)#只涉及python
    print(f.read())#涉及操作系统,报错
    

    文件的高级应用

    可写可读 r+

    with open('test.py','r+',encoding='utf-8') as fr:
        print(fr.readable())
        print(fr.writeable())
        fr.write('高级')#光标在文件头部,覆盖后面的字符
    

    可写可读 w+和w没有任何区别

    with open('test.py','w+',encoding='utf-8') as fr:
        print(fr.readable())
        print(fr.writeable())
    

    可读可写 a+ a模式默认光标在尾部

    with open('test.py','a+',encoding='utf-8') as fr:
        print(fr.readable())
        print(fr.writeable())
    

    综上:如果你真的有即可读有可写的需求,用两种不同的模式打开文件

    光标的高级应用(移动光标)

    八个进制位为一个字节,3个8进制位组成一个字符(针对中文,英文是一个字节一个字符)

    下三种移动光标的位置(以字节为单位)

    seek

    with open('test.py', 'rb') as fr:
    	fr.seek(5)  # 移动了3个字节,一个中文,默认从开头开始    	  print(fr.read())     								print(fr.read().decode('utf8'))
    

    whence规定只有0,1,2 三种模式 # 0相当于文件头开始;1相当于当前文件所在位置;2相当于文件末尾

    fr.seek(3, 0)  #0从开头    					 
    print(fr.read().decode('utf8'))    
    fr.seek(3, 1)    
    print(fr.read().decode('utf8'))    
    fr.seek(0, 2)    
    print(fr.read())
    
    

    tell : 告诉你当前所在位置#

     with open('test.py', 'rb') as fr:
     	fr.seek(3, 0)
    	print(fr.tell())
    
    

    truncate: 截断

    with open('test.py', 'ab') as fa:   
        fa.truncate(2) 
    
    

    移动光标(以字符为单位)read

     with open('test.py', 'r', encoding='utf8') as fr:
            print(fr.read(3))  # n表示n个字符,不加默认读取所有 # 中文和英文都属于一个字符
    
    

    文件的修改

    文件没有修改一说,只有覆盖

    缓存文件的原理:同时打开多个文件

    import os
    with open('test.py','r',encoding='utf-8') as fr,
    		open('test_swap.py','w',encoding='utf-8') as fw:
    	data=fr.read()
        data=data.replace('sb','傻逼')
        fw.write(data)
    os.remove('test.py')
    os.rename('test_swap.py','test.py')
    
    

    如果文件过大

    import os
    with open('test.py','r',encoding='utf-8') as fr,
    		open('test_swap.py','w',encoding='utf-8') as fw:
    	for i in fr:
            s='傻逼'
            fw.write('sb',s)
            fw.flush#保存
    os.remove('test.py')
    os.rename('test_swap.py','test.py')
    
    
  • 相关阅读:
    BZOJ 3709: [PA2014]Bohater
    BZOJ 3689: 异或之
    BZOJ 4385: [POI2015]Wilcze doły
    2017-2018 ACM-ICPC German Collegiate Programming Contest (GCPC 2017) Solution
    Codeforces Round #522 (Div. 2, based on Technocup 2019 Elimination Round 3) Solution
    BZOJ 4320: ShangHai2006 Homework
    BZOJ 4318: OSU!
    2016-2017 ACM-ICPC CHINA-Final Solution
    BZOJ 5312: 冒险
    Codeforces Round #520 (Div. 2) Solution
  • 原文地址:https://www.cnblogs.com/zqfzqf/p/12577906.html
Copyright © 2011-2022 走看看