Python学习笔记-03-文件扫描

问题描述


文件扫描,想必大家都很清楚这个概念,就是读取外部文件(比如存储在硬盘上的数据),至内存(计算机主存)中,这是一个输入流的概念。现在我想就这个问题展开叙述一下

分析问题


关键字

文件,输入流,二进制文件,文本文件,缓冲区,块,行,字符,文件迭代器,循环

简短描述

大家可能会问,为什么要读取文件数据呢?其实有些时候,一些数据保存在硬盘上,但是CPU不能直接与硬盘交互,所说必须先将数据读取到内存中,在通过程序中的代码逻辑处理这些数据,之后可以选择打印或者再次输出到硬盘中。

那么针对输入流而言

  • 首先我想到的是该怎么编程实现呢?
    • 哦,我们可以使用循环来处理文件。
  • 使用循环处理时,该采用哪种循环呢?
    • while or for 循环都可以,但是二者编程实现时会有细微差别。
  • 二进制数据文件,例如图片视频之类的,与文本数据该怎么分别处理呢?
    • 二进制数据建议采用while循环进行处理,并且按块读入,加速处理速度;
    • 文本数据建议采用for循环进行处理,并且使用文件迭代器,当文件较大,并且内存羞涩时,可以加速处理速度。

代码示例


以下代码基于Python3,可能不适用于Python2

  • 文件内容一次加载至字符串,可以调用read:
file = open('test.txt', 'r')    
print(file.read())              #文件一次读入到一个字符串中,并打印显示
  • 使用while循环,分块加载文件,并且手动判断是否读到文件末尾,从而break退出循环

    • 块为1个字节大小:

          file = open('test.txt')     #使用默认的'r'模式
          while True:
              char = file.read(1)     #缓冲区为1个字节大小,即一次读取一个字符
              if not char: break      #若读取到的字符对象为空,则文件已读取完毕,跳出循环
              print(char) 
    • 块为10个字节大小

          file = open('test.txt')     #使用默认的'r'模式
          while True:
              chunk = file.read(10)   #缓冲区为10个字节大小
              if not chunk: break     #若读取到的字符串为空,则文件已读取完毕,跳出循环
              print(chunk)    
    • 块为一行大小

          file = open('test.txt')     #使用默认的'r'模式
          while True:
              line = file.readline()  #一次读取一行
              if not line: break      #若读取到的字符串为空,则文件已读取完毕,跳出循环
              print(line, end='')     #line已经有了一个换行符,故此处抑制print的隐式换行
  • 使用for循环逐个字符处理

    for char in open('test.txt').read():
        print(char)
    
  • 使用for循环,逐行读取文本,这是最方便的!

    • 不适用迭代器,一次读取所有行,吃内存,大文本不推荐!

      for line in open('test.txt').readlines():
          print(line, end='')
      
    • 使用文件迭代器,自动在每次循环迭代时读取一行,推荐,最佳选择!

      for line in open('test.txt'):
          print(line, end='')

自我总结


文件扫描是一个很重要的方法,推荐使用最后一种,但是其他的也要熟练掌握!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值