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

    1.文件操作的大致流程

      (1)打开文件,通过文件句柄并且赋值给一个变量, 也就是创建文件对象                     文件句柄:(在文件I/O中,要从一个文件读取数据,应用程序首先要调用操作系统函数并传送文件名,并选一个到该文件的路径     来打开文件。该函数取回一个顺序号,即文件句柄(file handle),该文件句柄对于打开的文件是唯一的识别依据。要从文件中读取一块数据,应用程序需要调用函数ReadFile,并     将文件句柄在内存中的地址和要拷贝的字节数传送给操作系统。当完成任务后,再通过调用系统函数来关闭该文件。)

      (2)对文件进行操作

      (3)关闭文件

    三种基本的操作模式: r(只可读) w(只可写) a(追加)

    2.比如说现在有一个文件(诗词)如下

    让心慢慢地浸在心底,
    让心沉浸于汲汲的水流,
    让心搁浅在避风的沙滩。
    心如止水,心无喧嚣,
    心无烦絮,心无杂思,
    心无祝福,心无祈祷,
    心无思念,此刻方知,
    心静之后再无微微的波层,
    静心之后再无层层的涟漪。
    

      = open('诗词'#打开文件

      data=f.read()#获取文件内容也可以对文件进行操作
      f.close() #关闭文件
    3.文件的一些具体操作
     3.1 打开文件
    f=open("诗词","r",encoding="utf8")#读出这个文件
    data=f.read
    print(data)

    data=f.read(5)# 这里表示取5个字符,还有一点汉字在这里面一个汉字表示一个字符(in Py3)
    print(data)
    data=f.readline()  读出第一行
    print(data)
    结果如下:
    让心慢慢地浸在心底,
    让心沉浸于汲汲的水流,
    让心搁浅在避风的沙滩。
    心如止水,心无喧嚣,
    心无烦絮,心无杂思,
    心无祝福,心无祈祷,
    心无思念,此刻方知,
    心静之后再无微微的波层,
    静心之后再无层层的涟漪。
    让心慢慢地

    让心慢慢地浸在心底
    
    

      

    3.2 读出单行和多行
        data=f.readlines() 读出所有行的内容 无论是read()还是readline(),光标会发生位置变化
        print(data)
        f.close #注意及时关闭文件
        if not close 数据会缓存,而不是磁盘
            for i in range (5):        #打印出前5行,
          print(f.readline())
         for line in .readlines()   # 打印出所有行
          print(line)
    但是呢,我们上面只是打印出行数,如果我们需要在某一行后面加上一些内容或者在后面加上内容该怎么办?所以呢,看下面: 添加内容
    f=open("诗词","r",encoding="utf8")
    num=0
    for i in f.readlines():
        num+=1
        if num==6:
            i="".join([i.strip(),"I am a  student"])
        print(i.strip())
    f.close()
    结果为:

    F:Python安装python.exe G:/Pycharm文件/week2/8.26/333333333333.py
    让心慢慢地浸在心底,
    让心沉浸于汲汲的水流,
    让心搁浅在避风的沙滩。
    心如止水,心无喧嚣,
    心无烦絮,心无杂思,
    心无祝福,心无祈祷,I am a student
    心无思念,此刻方知,
    心静之后再无微微的波层,
    静心之后再无层层的涟漪。

    Process finished with exit code 0

    3.3 读出光标的位置

    print(f.tell())   #取出光标的位置        tell对于英文字符就是占一个,中文字符占三个,区分与read()的不同.
    print(f.read(2)
    print(f.tell())
    print(f.read(5))              #read后不管是中文字符还是英文字符,都统一算一个单位,read(5),此刻就又读了5个中文字符
    print(f.tell())
    f.seek(5) #表示移动光标5个位置
    print(f.tell())
    结果为:

    F:Python安装python.exe G:/Pycharm文件/week2/8.26/文件操作练习.py
    0
    让心

    6
    慢慢地浸在
    21

    5

    Process finished with exit code 0

    3.4  文件的读操作

    f = open('诗词','w')
    f.write('hello 
    ')
    f.flush() # 清除文件缓冲区,文件以写方式打开时将缓冲区内容写入文件 ,这时候以前文件里面的内容就消失了
    结果是: 在诗词的那个文本文档里面以前的内容会消失,出现“hello” 内容

    3.5  模块,用于进度条

    import time ,sys            #一个时间系统模块
    for i in range(20):
        sys.stdout.write("#")
        sys.stdout.flush()          
        time.sleep(0.1)         #这里表示每隔0.1秒打印出来一个#
        f.close
    结果:####################

     

    f = open('诗词','w')
    f.truncate()             #全部截断
    f.truncate(5)            这里也是截断但是你会在 目录里发现 光标停在 离开头 5个位置处

     f=open("诗词","r",encoding="utf8")

      print(f.isatty())  isatty() 方法检测文件是否连接到一个终端设备,如果是返回 True,否则返回 False。

      print(f.seekable())
      print(f.readable())
      f.close()
    结果是:

    False
    True
    True

    3.6  新建一个文件 ,把所需要写的内容写进去
    f = open('新文件','w') #打开文件
    f = open('新文件','a') #打开文件
    f.write('床前明月光1
    ')
    f.write('疑是地上霜2
    ')
    f.write('举头望明月3
    ')
    f.write(低头思故乡!4)
    

    这时呢,我们会发现左边目录下会多出一个文件名为“新文件”的文件,里面正是我们所写的内容

    3.7  文件除了r  w  模式还有没有其他模式,这里我们就引出了r+  w+  模式:

     r+  模式

    f = open('新文件','r+',encoding="utf8")    #以读写模式打开文件
    print(f.read(5))            #可读          
    print('------')
    print(f.read())
    f.write('hello') #如果这句在前面 那么插入的位置就是在前面并且取代前面几个位置

    结果:

    F:Python安装python.exe G:/Pycharm文件/week2/8.26/文件操作练习.py
    让心慢慢地
    ------
    浸在心底,
    让心沉浸于汲汲的水流,
    让心搁浅在避风的沙滩。
    心如止水,心无喧嚣,
    心无烦絮,心无杂思,
    心无祝福,心无祈祷,
    心无思念,此刻方知,
    心静之后再无微微的波层,
    静心之后再无层层的涟漪。hello

    Process finished with exit code 0

    w+  模式

    f = open('新文件','w+')    #以写读模式打开文件
    print(f.read(5))          #什么都没有,因为write 模式首先先格式化了文本
    f.write('hello world')
    print(f.read())           #还是read不到  因为此时光标还在hello  world 之后,是读不到的,只能调一下光标的位置,再读就行。
    f.seek(0)
    print(f.read())

    结果是:
    hello world

    a+: 附加读写方式打开    w+与a+的区别在于是否在开始覆盖整个文件

    f = open('诗词','a+',encoding="utf8")
    f.write("123")
    (f.read())
    f.close()
    结果为:
    昨夜寒蛩不住鸣。
    惊回千里梦,已三更。
    起来独自绕阶行。
    hello world123

      

    3.8  对文件的修改操作,

    刚才 上面在地6行加上了内容,是在添加内容后再输出的,我们这里做的是 直接对文件进行了修改操作

    1 f = open('诗词','r+',encoding="utf8") #以写读模式打开文件
    2 f.readline()
    3 print(f.tell())
    4 f.write('hello world')
    5 f.close()
    在最后面加上这句话结果为:
    26
    昨夜寒蛩不住鸣。
    惊回千里梦,已三更。
    起来独自绕阶行。
    hello world

    f_read = open('诗词','r',encoding="utf8") #以读写模式打开文件
    f_write = open('新文件','w',encoding="utf8") #以写读模式打开文件
    count=0
    for line in f_read:
      if count==3:
        line='hello world '
        f_write.write(line)
        count+=1
    结果为:
    昨夜寒蛩不住鸣。
    惊回千里梦,已三更。
    起来独自绕阶行。
    hello world
     

      3.9  with 语句:

       有时候我们在操作完之后会忘记关闭文件,这时呢,就可以通过 with来执行

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

            pass
     

     

     

    
    


  • 相关阅读:
    【SAS NOTE】OUTPUT
    【SAS NOTES】_NULL_
    【SAS NOTE】sas 9.2 安装
    【SAS NOTE】FREQ
    纯数学教程 Page 203 例XLI (1)
    纯数学教程 Page 203 例XLI (3)
    纯数学教程 Page 203 例XLI (2)
    Prove Cauchy's inequality by induction
    纯数学教程 Page 325 例LXVIII (15) 调和级数发散
    纯数学教程 Page 325 例LXVIII (15) 调和级数发散
  • 原文地址:https://www.cnblogs.com/mars527/p/5811519.html
Copyright © 2011-2022 走看看