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

    一、基本操作

    1、读操作

    (1)“r”

    1 f=open("yesterday",r",encoding='utf-8')#文件句柄,r代表读模式
    2 data=f.read()
    3 data1=f.read()
    4 print(data)
    5 print("----data1---%s-"%data1)#注意点1:data1没有打印出来,原因文件读的顺序
    6
    f.close()
    
    

    运行结果:(data1后没有数据,原因文件读写顺序从头到尾,读完一遍,指针停留在末尾)

    (2)“r+”因为光标定位在开始,如果先写他就会直接覆盖,如果先读后写就会追加到最后

    1 f=open("yesterday","r+",encoding="utf-8")
    2 print(f.readline())
    3 print(f.tell())
    4 print(f.readline())
    5 print(f.tell())
    6 print(f.readline())
    7 print(f.tell())
    8 f.write("---我的天---")
    9 f.close()

    2、写操作

    (1)“w”错误示例:(只写不能读)

    1 f=open("yesterday",'w',encoding='utf-8')#文件句柄
    2 data=f.read()
    3 data1=f.read()
    4 print(data)
    5 print("----data1---%s-"%data1)#注意点1:data1没有打印出来,原因文件读的顺序
    6 f.write("我们一个像夏天,一个像秋天")

    运行结果:


    (2)“w+”还是会先创建文件,重新定位后,要追加还是从最后面写

    1 f=open("yesterday2",'w+',encoding="utf-8")
    2 f.write("---我的天1---
    ")
    3 f.write("---我的天2---
    ")
    4 f.write("---我的天4---")
    5 print(f.tell())
    6 f.seek(10)
    7 print(f.readline())
    8 f.write("---我的天0---")
    9 f.close()

    注意:(1)r“只读”;rb“二进制只读”;r+“先读可写”,文件指针放在文件开头(也是覆盖,但是前提是该文件必须存在,他不能创建文件),写的内容是在后面追加,不能写到中间

              (2)w“只写”:如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件(千万注意,要不然之前文档中的内容就没了),写的内容在后面追加,也不能写到中间

                       wb“二进制只写”;w+“先写后读,如果该文件如果该文件已存在则将其覆盖,不存在,创建新文件”

                      读写比写读重要

              (3)[ a=append追加]     a“追加”;ab“二进制追加”;a+“可读可写追加” ;ab+“二进制可读可写”

    3、文件的增删改查

    (1)

     1 f=open("yesterday2","r",encoding="utf-8")
     2 '''
     3 print(f.readline())#读取第一行
     4 print(f.readline(2))#读取第二行的前两个字符;
     5 '''
     6 # for i in range(5):#读取五行
     7 #     print(f.readline())
     8 for i in range(5):
     9     print(f.readline(2))#里面的数字是每次限制读的字数,读五次,读完一行才会进入下一行
    10 f.close()

    (2)读文件时,将每一行读取打印出来,只有第五行不打印换成(---我是分割线---)

    1 f=open("yesterday2","r",encoding="utf-8")
    2 for index,line in enumerate (f.readlines()):
    3     if index==4:
    4         print ("---我是分割线---")
    5         continue
    6     print(line.strip())#因为有默认的换行符会打印出来,去掉
    
    7 f.close()

    这种方法循环效率是比较低的,他会将读取的数据都存储到内存,下面这种将是高效的,因为每次只读取一行存到内存中

    1 f=open("yesterday2","r",encoding="utf-8")
    2 count=0
    3 for line in f:
    4     print(line)
    5     count+=1
    6     if count==4:
    7         print("---我是分割线---")
    8         continue
    9 f.close()        

     (3)seek()和tell()

     1 #文件的定位:
     2 # tell():文件光标的当前位置
     3 # seek(offset [,from]):重新定位,第一个参数是要移动几个字节数,第二个是从那开始:0从头开始,1从当前位置,2从末位
     4 #对于非二进制的文本文件,不允许使用偏移定位。
     5 f=open("yesterday","r",encoding="utf-8")
     6 print(f.tell())
     7 print(f.readline().strip())
     8 print(f.tell())
     9 print(f.seek(0,1))#定位到当前位置
    10 print(f.readline().strip())
    11 print(f.seek(0,2))#定位到文件末尾
    12 print(f.readline().strip())
    13 print(f.seek(0,0))#定位到文件开头
    14 print(f.readline().strip())
    运行结果:
    D:pythonpython.exe D:/pythonwork/day3/file_op.py
    0
    yesterday one i was young
    27
    27
    i stand on the mountain
    165
    
    0
    yesterday one i was young
    Process finished with exit code 0

    (4)f.flush()

    作用1:刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件

    只有写了f.flush()时才可以将hello1写进去

    作用2:可以用做进度条打印

    import sys,time
    for i in range (20):
        sys.stdout.write("")#以标准格式输出
        sys.stdout.flush()
        time.sleep(0.1)

    (5)f.truncate()把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。

    1 f=open("yesterday","a",encoding="utf-8")
    2 f.seek(10)
    3 print(f.tell())
    4 f.truncate(10)

    (6)修改文件

    1 f=open("yesterday","r",encoding="utf-8")
    2 f_new=open("yesterday.bar","w",encoding="utf-8")
    3 #把文件中第三行改为陪晓红把眼泪擦干
    4 for line in f:
    5     if "陪你把眼泪擦干"in line:
    6         line=line.replace("陪你把眼泪擦干","陪晓红把眼泪擦干")
    7     f_new.write(line)
    8 f.close()    

    (7)重命名和删除文件

    1 import os
    2 os.rename( "old.txt", "new.txt" )# 重命名文件old.txt到new.txt。
    1 import os
    2 # 删除一个已经存在的文件new.txt
    3 os.remove("new.txt")

    扩展知识:关于目录

    1 import os
    2 os.mkdir("test1")#在当前目录下创建一个叫test1的文件夹
    3 os.chdir("test")#将当前目录改为test
    4 print(os.getcwd())#获得当前的目录
    5 os.rmdir("test1")#删除该文件

     (8)实现简单的shell sed功能

     1 #修改文件(打开两个文件,一个用来读,一个用来写)
     2 import sys
     3 f=open("yesterday","r",encoding="utf-8")
     4 f_new=open("yesterday.bar","w",encoding="utf-8")
     5 find_str=sys.avg[1]
     6 replace_str=sys.avg[2]
     7 #把文件中第三行改为陪晓红把眼泪擦干
     8 for line in f:
     9     if find_str in line:
    10         line=line.replace(find_str,replace_str)
    11     f_new.write(line)
    12 f.close()  
    13 f_new.close()

    (9)对于我们经常忘记关闭文件,所以可以用with语句来解决这个问题:

    1 with open ("yesterday",'r',encoding='utf-8')as f:#打开一个文件
    2     for line in f:
    3          print(line)
    1 with open ("yesterday",'r',encoding="utf-8")as f,
    2     open("yesterday.bar","r",encoding="utf-8")as f1:#同时打开多个文件,并且交替打印每一行;根据python规则,一行通常不超过80字符,所以换行
    3     for line,line1 in zip(f,f1):
    4         print(line,line1)
  • 相关阅读:
    SHELL编程之执行环境----邹立巍的博客
    linux内核分析系列--百度
    Linux模式设计系列( 内核与应用关联思考)
    Linux内核源代码情景分析系列
    Linux内核学习和研究及嵌入式(ARM)学习和研究的开放文档
    实验楼内核分析 +图
    《Linux内核修炼之道》 系列
    和菜鸟一起学linux内核源码之基础准备篇 系列 体系结构图
    实验楼在线算法学习
    linux-0.11内核 调试教程+GCC源代码
  • 原文地址:https://www.cnblogs.com/gaofighting/p/7878431.html
Copyright © 2011-2022 走看看