zoukankan      html  css  js  c++  java
  • 对文件内容进行迭代

    #前面了解了文件的基本操作方法。在实际应用中,对文件内容进行迭代和重复执行操作是比较常见的操作。
    #所谓迭代,是指不断重复某一个动作,直到这些动作都完成为止。
     
    1、按字节处理
    #在while循环中,read方法是最常见的对文件内容进行迭代的方法,例如:
     1 #!/usr/bin/python3
     2 #-*-coding:UTF-8-*-
     3 #file_while
     4 
     5 path='./test.txt'
     6 f_name=open(path,'w')
     7 print('write length:',f_name.write('Hello'))
     8 f_name=open(path)
     9 c_str=f_name.read(1)
    10 while c_str:
    11     print('read str is:',c_str)
    12     c_str=f_name.read(1)
    13 f_name.close()
    #执行结果如下:
    1 D:Pythonworkspacedatatime20180116>python file_while.py
    2 write length: 5
    3 read str is: H
    4 read str is: e
    5 read str is: l
    6 read str is: l
    7 read str is: o
    #由执行结果看到,该示例对写入文件的每个字符都进行了循环了。这个程序运行到文件末尾时,read方法会返回一个空字符串,未执行到空字符串前,返回的都是非空字符串,表示布尔值为真。
    #该示例中出现了代码的重复使用,可以使用while true/break语句结构进一步优化。优化代码如下:
     1 #!/usr/bin/python3
     2 #-*-coding:UTF-8-*-
     3 #file_while
     4 
     5 path='./test.txt'
     6 
     7 f_name=open(path)
     8 while True:
     9     c_str=f_name.read(1)
    10     if not c_str:
    11         break
    12     print('read str is:',c_str)
    13 f_name.close()
    #由代码结构看到,更改后的代码比之前更好。
    2、按行操作
    #在实际操作中,处理文件时可能需要对文件的行进行迭代,而不是单个字符。此时可以使用和处理字符一样的方式,只不过要使用readline方法,例如:
     1 #!/usr/bin/python3
     2 #-*-coding:UTF-8-*-
     3 #迭代_readline
     4 
     5 path='./test.txt'
     6 
     7 f_name=open(path)
     8 while True:
     9     line=f_name.readline(1)
    10     if not line:
    11         break
    12     print('read line is:',line)
    13 f_name.close()
    #使用该方式得到的是按行读取的字符。
     
    3、使用fileinput实现懒加载式迭代
    #我们前面了解了read方法和readline方法,这两个方法不带参数时将度组文件中所有内容,然后加载到内存中。当文件很大时,使用这个方式会占用太多内存,甚至直接使内存溢出(内存不够),从而导致执行失败。这种情况下,我们可以考虑使用while循环和readline方法代替这些方法。
    #在Python中,for循环是优先考虑的选择,使用for循环意味着可以对任何进行分隔操作,而不是一步到位。
    #按行读取时,若能使用for循环,则称之为懒加载式迭代,因为在操作过程中只读取实际需要的文件部分。使用fileinput需要导入fileinput模块,例如:
    1 #!/usr/bin/python3
    2 #-*-condig:UTF-8-*-
    3 #fileinput
    4 
    5 import fileinput
    6 for line in fileinput.input(path):
    7     print('line is',line)
    #在该示例中没有看到文件的打开和关闭操作,是怎么处理文件的呢?其实这些操作被封装在input方法内部了。
     
    4、文件迭代器
    #从Python2.2版本开始,文件对象是可迭代的,这意味着可以直接在for循环中使用文件对象,从而进行迭代,例如:
     1 #!/usr/bin/python3
     2 #-*-coding:UTF-8-*-
     3 #文件迭代器
     4 
     5 path='./test.txt'
     6 
     7 f_name=open(path)
     8 for line in f_name:
     9     print('line is:',line)
    10 f_name.close()
    #该示例使用for循环对文件对象进行迭代,记住迭代结束后的文件要显式关闭。
  • 相关阅读:
    【KM】BZOJ1937 [Shoi2004]Mst 最小生成树
    【动态规划+Floyd】OpenJudge3368
    【四边形不等式】HDU3506-Monkey Party
    【tarjan】BZOJ2140-稳定婚姻
    【并查集】BZOJ4668-冷战
    [ZJOI2010]贪吃的老鼠(网络流+建图)
    [NOI2010]航空管制(拓扑排序+贪心)
    [CERC2017]Intrinsic Interval(神仙+线段树)
    [CTSC2012]熟悉的文章(后缀自动机+动态规划)
    [CERC2014]Virus synthesis
  • 原文地址:https://www.cnblogs.com/DLHe/p/8370512.html
Copyright © 2011-2022 走看看