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

    Python 3学习—— 文件操作

     写此博客 是为了激励自己,并且将自己的心得以及遇到的问题与人分享

    一、课堂笔记

      1.一切皆文件  对文件的操作一般都三个过程:打开、操作、关闭。

      f = open ('小文件','r',encoding = 'utf8') # r 为读模式 w 为写模式  整体为得到文件的操作句柄
    
      data = f.read()
      print(data)
      f.close()

      打开文件,得到文件的操作句柄 

      通过文件操作句柄对文件进行操作

      关闭文件 

      2.read方法 

       read(5) 取出来的是5个字符,在Python3 中中文算是一个字符,英文为一个字母一个字符。

      3.write方法

      f = open ('小文件','w',encoding = 'utf8') # r 为读模式 w 为写模式 a 为追加模式 
                               # w 的时候会清空文档内容再写 a的时候会直接追加
      f.write('helloworld')
      f.close()   
      ## 执行效果:以前文件中的内容都不见了,只有一个'helloworld'

      4.close方法

        只要打开一个文件,就要关闭它。

      5.模式

         r 模式  只可读

        w 模式  只可写 使用w模式打开后,先将文件进行初始化,文件为空了就。

        a 模式  追加模式      

        w+ 打开文件并读写  1. 文件存在,则清空(也即写入空); 2. 文件不存在,则创建文件 ; 3. 文件流定位到开始位置, 所以read() 会得到空。

        r+  打开文件并读写   1. 文件存在,打开文件,文件指针定位到文件开始位置; 2. 文件不存在, 则报错文件不存在。

        a+  打开文件并读添   1. 文件存在,打开文件,文件指针定位到文件开始位置,但不清空;2.  文件不存在,创建文件; 3. 打开后读取时,在文件开头位置,4. 写入时,添加到文章末尾,并且指针位于添加后的末尾,所以再次读取会乱码。

      6.readline() 只读一行  readlines() 读取全部放在一行中

      在文件中取出某一行,对其操作。

    #author:"LFD"
    #date: 2018/2/13
    data = open('lfd','r',encoding='utf8') #文件的操作句柄(对象),只有拿到它之后才能进行操作。
    num = 0
    for i in data.readlines():
        num += 1
        if num == 6:
            i = ''.join((i.strip(),'ssss'))  # 通过number自己定义的一个变量来对文件的某一行进行操作
        print(i.strip())
    data.close()

       另一种取出文件内容的方法  跟迭代器有关 最好用如下这种方式

    #author:"LFD"
    #date: 2018/2/13
    data = open('lfd','r',encoding='utf8') #文件的操作句柄(对象),只有拿到它之后才能进行操作。
    
    for i in data: #这是for 内部将 data对象做成了一个迭代器,用一个取一个,对于文本来说,用一个取一行。data本神并不是一个迭代器
        print(i.strip())
    
    data.close()

      7.文件操作一系列的方法:

        readline() 取出文件的一行 ;

        readlines() 取出文件的多行,得到的是一个列表,把每一个readline做成一个字符串放到列表中去了。

          上面虽然可以取出来,但会有多余的  换行符,使用 .strip() 方法来去掉多余的

          字符串拼接最好不要用 + ,用 join() 方法会更好一些。

        tell() 打印光标位置 英文字符占一个 中文字符占3个 

        seek() 调整光标的位置   data.seek(0)----这么用

        flush()  把缓存中的数据保存到磁盘上去,可以用来做进度条

      import sys,time
      for i in range(30):
          sys.stdout.write("*")
          sys.stdout.flush()  # 不会进入缓冲区,刚进入缓冲区存入硬盘
          time.sleep(0.2)    

        truncate(5)  截断,从第五个光标位置处,后面的内容全部截断删除掉了。文件打开方式要使用 ' a ' 模式。使用 ' w '模式打开文件再使用该方法没有什么意义。

      8.终极问题 对文本进行修改

    #author:"LFD"
    #date: 2018/2/13
    f_read = open('lfd','r',encoding='utf8')
    f_write = open('lfd3','w',encoding='utf8')
    number = 0
    for line in f_read:
        number += 1
        if number == 5:
            line = ''.join([line,'xxx
    '])  #这个是对文件某行末尾进行追加
        #   line = 'hello world' 这个是 对文件某行内容覆盖书写
        f_write.write(line)
    
    
    f_read.close()

      9.将字典型数据转换成字符型存入文件中,再使用eval() 方法将字符型数据转回字典型数据。

    a = str({'beijing':{1:111}})
    print(type(a))
    print(a)
    a = eval(a) # 将字符串类型的'a'转换成字典型的 'a'
    print(type(a))
    print(a['beijing'])

      10.with 语句 with() 方法

      以后打开文件尽量采用 with 方法来打开

    f = open('lfd','r') #必须要手动关闭文件
    f.readline()
    f.read()
    f.close()
    
    with open('lfd','r') as f: # 退出了with代码块会自动将文件关闭
        f.readline()
        f.read()
    
    print('hello world')

      with 还支持同时对多个文件的上下文进行管理

       同时管理多个文件对象创建

    with open('lfd','r') as f_read, open('lfd2','w') as f_write:
        for line in f_read:
            f_write.write(line)

    二、心得

      在过年期间到现在,经历了很多事情,包括是否还要从事这个专业,是否要继续学习下去。中间间隔了这么久,也认认真真的去思考了很多很多东西。最后,还是回来了。在我心里,做一事就要像一事,连这点小事都做不好,干什么都成不了。

      这章的学习可谓是辛苦的不行,本来2-3天的内容硬是看了足足半个月,虽然中间夹杂着过年。回到了学校,步入了正轨,但对Python的学习还是不会落下。

  • 相关阅读:
    手撸机器学习算法
    手撸机器学习算法
    《Python深度学习》 Part 1
    使用Gimp制作Windows应用程序图标
    C# 检查硬盘分区是ssd还是hdd
    微信小程序授权登录以及用户信息相关接口调整导致授权框不弹出
    CNN-LSTM
    MIL基本语法
    Akka Platform Guide 关键点梳理
    阿里云windows服务器激活
  • 原文地址:https://www.cnblogs.com/jinzejun/p/8511012.html
Copyright © 2011-2022 走看看