zoukankan      html  css  js  c++  java
  • 文件读写与修改

    对文件操作流程

    1. 打开文件,得到文件句柄并赋值给一个变量
    2. 通过句柄对文件进行操作
    3. 关闭文件

    基本操作

    #读文件
    f = open("Oneday.txt","r", encoding="utf-8")
    data=f.read()   #read file
    print(data,"
    ")
    f.close()
    #写文件
    f01 = open("Oneday01.txt","w", encoding="utf-8")
    f01.write("时间也就过去了
    ")
    f01.write("东方 
    ")
    f01.close()
    #追加文件内容
    f01 = open("Oneday01.txt","a", encoding="utf-8")
    f01.write("追加
    ")
    f01.write("一次!")
    f01.close()
    # readline读取前面5行内容
    
    f = open("Oneday.txt","r", encoding="utf-8")      #文件句柄
    
    for i in  range(5):
    
        print(f.readline())  #读取文件的一行内容
    #循环整个文件内容,读到第10行内容停止操作
    
    #列表方式
    
    f = open("Oneday01.txt",'r', encoding="utf-8")      #文件句柄
    
    for line in f.readlines():
    
        print(line.strip())        #打印整个列表 
    
    
    
    f = open("Oneday01.txt",'r', encoding="utf-8")      #文件句柄
    
    for index,line in enumerate(f.readlines()):
    
        if index == 9:
    
            print("我是第10行,打印到此为止!
    ")
    
            continue
    
        print(line.strip())        #打印整个列表
    
    
    #非列表方式
    count
    = 0 for line in f: if count == 9: print('-------------------') count += 1 continue print(line) count += 1

    #以上两种方式一般采用非列表方式

    文件的常用操作:

    print(f.encoding)     #打印文件的编码,这边使用的是utf-8
    
    print(f.fileno())     #python文件掉用系统的API接口的编号
    
    print(f.name)         #打印文件的名字
    
    print(f.seekable())   #判断指针是否可以进行移动,因为不是所有的文件类型都是可以移动的,可以移动返回True结果
    
    print(f.readable())   #判断文件现在是否可以读
    
    print(f.writable())   #判断文件现在是否可以写
    
    print(f.flush())      #刷新内存缓存中的数据,以便于时时的将缓存存入到硬盘中
    
    print(f.closed)       #判断文件是否被关闭
    
    print(f.encoding)     #打印文件的编码,这边使用的是utf-8
    print(f.fileno())     #python文件掉用系统的API接口的编号
    print(f.name)         #打印文件的名字
    print(f.seekable())   #判断指针是否可以进行移动,因为不是所有的文件类型都是可以移动的,可以移动返回True结果
    print(f.readable())   #判断文件现在是否可以读
    print(f.writable())   #判断文件现在是否可以写
    print(f.flush())      #刷新内存缓存中的数据,以便于时时的将缓存存入到硬盘中

    f.flush()功能的解释说明

    #说明:加上flush选项之后,#号循环一次打印一次,所以看到的结果是#号被逐渐打印出来,和就是flush刷新内存的作用
    
    import sys,time
    for i in range(20):
        sys.stdout.write("#")
        sys.stdout.flush()
        time.sleep(0.1)

    文件的其他模式:

    f = open("Oneday01.txt",'r', encoding="utf-8")      #文件句柄
    print(f.tell())         #按照字符来进行计数
    print(f.readline())
    print(f.readline())
    print(f.readline())
    print(f.tell())
    f.seek(0)              #将指针移动到第一行来进行重新读取文件
    print(f.readline())    #重新打印第一行内容
    
    
    f = open("Oneday01.txt",'a', encoding="utf-8")
    f.seek(10)         #将光标移动到第10行
    f.truncate(20)     #从文件开头截断10个字符,包括空格 '''
    
    
    
    #文件的读写模式,打开,并且可以追加数据(工作中常用的一种模式)
    f = open("Oneday02.txt",'r+', encoding="utf-8")
    print(f.readline())
    print(f.readline())
    print(f.readline())
    f.write("------------------r+-----------")
    print(f.tell())
    print(f.readline())
    
    
    #文件的写读模式,先创建一个文档,然后再写数据
    f = open("Oneday02.txt",'w+', encoding="utf-8")
    print(f.readline())
    print(f.readline())
    print(f.readline())
    f.write("------------------w+-----------
    ")
    f.write("------------------w+-----------
    ")
    f.write("------------------w+-----------
    ")
    f.write("------------------w+-----------
    ")
    print(f.tell())
    f.seek(10)
    print(f.tell())
    f.write("should be at the begining of the second line!")
    print(f.readline())
    
    
    #文件的追加读模式,可以追加读
    #f = open("Oneday02.txt",'a+', encoding="utf-8")

    二进制文件:

    #文件的二进制格式,以二进制的模式读取文件
    # 一般网络传输(FTP)的情景下会需要用到二进制格式,另外一种是例如类似的二进制视频文件场景需要用到这种模式
    f = open("file01.mp4",'rb')
    print(f.readline())
    print(f.readline())
    print(f.readline())
    
    #二进制文件的写模式
    f = open("Oneday02.txt",'wb')
    f.write("hello binary01
    ".encode())  #encode告送系统如果找不到字符类型的时候默认去找UTF-8模式,如果不写就会报str类型错误
    f.close()

    with语句

    为了避免打开文件后忘记关闭,可以通过管理上下文,即:

    with open('log','r') as f:

    ...

    如此方式,当with代码执行完毕时,内部会自动关闭并释放文件资源。

    在python2.7后,with支持同时对多个文件的上下文进行管理,即:

    with open('log1') as obj1, open('log2') as obj2:

      pass

    总结:

    打开文件的模式有:

    • r,只读模式(默认)。
    • w,只写模式。【不可读;不存在则创建;存在则删除内容;】
    • a,追加模式。【可读;   不存在则创建;存在则只追加内容;】

    "+" 表示可以同时读写某个文件

    • r+,可读写文件。【可读;可写;可追加】
    • w+,写读
    • a+,同a

    "U"表示在读取时,可以将 自动转换成 (与 r 或 r+ 模式同使用)

    • rU
    • r+U

    "b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)

    • rb
    • wb
    • ab
  • 相关阅读:
    eclipse web项目转maven项目
    spark作业
    大数据学习——spark-steaming学习
    大数据学习——sparkSql对接hive
    大数据学习——sparkSql对接mysql
    大数据学习——sparkSql
    大数据学习——spark运营案例
    大数据学习——spark笔记
    大数据学习——sparkRDD
    python面试题
  • 原文地址:https://www.cnblogs.com/happystudyhuan/p/12306153.html
Copyright © 2011-2022 走看看