<sub id="miph7"></sub>
<table id="miph7"></table>

        1. 解决python疑难杂症python—文件迭代操作,教你读取文件的多种方法

          解决python疑难杂症python—文件迭代操作,教你读取文件的多种方法

          要读取一个文件有很多种方式:按字节数读取、按行读取、按段落读取、一次性全部读取等等。如果不是深入的操作文件数据,按行读、写是最通用的方式。

          以下是下面测试时使用的文件a.txt的内容:

          1 first line
          2 second line
          3 third line

          在Python中,readline()函数可以一次读取一行,且每次都是前进式的读取一行,读到文件结尾的时候会返回空字符串。

          1 >>> f = open(‘a.txt‘)
          2 >>> f.readline()
          3 ‘first line\n‘
          4 >>> f.readline()
          5 ‘second line\n‘
          6 >>> f.readline()
          7 ‘third line\n‘
          8 >>> f.readline()
          9 ‘‘

          readline()的操作就像是有一个指针,每次读完一行就将指针指向那一行的后面做下标记,以便下次能从这里开始继续向后读取一行。

          除了readline(),open()打开的文件对象还有另一种方式next()可以一次向前读取一行,只不过next()在读取到文件结尾的时候不是返回空字符串,而是直接抛出迭代异常:

          在学习过程中有什么不懂得可以加我的
          python学习交流扣扣qun,×××
          群里有不错的学习视频教程、开发工具与电子书籍。
          与你分享python企业当下人才需求及怎么从零基础学习好python,和学习什么内容
          
          1 >>> f = open("a.txt")
          2 >>> f.__next__()
          3 ‘first line\n‘
          4 >>> f.__next__()
          5 ‘second line\n‘
          6 >>> f.__next__()
          7 ‘third line\n‘
          8 >>> f.__next__()
          9 Traceback (most recent call last):
          10 File "<stdin>", line 1, in <module>
          11 StopIteration

          内置函数next()会自动调用next(),也能进行迭代:

          1 >>> f = open("a.txt")
          2 >>> next(f)
          3 ‘first line\n‘
          4 >>> next(f)
          5 ‘second line\n‘
          6 >>> next(f)
          7 ‘third line\n‘
          8 >>> next(f)
          9 Traceback (most recent call last):
          10 File "<stdin>", line 1, in <module>
          11 StopIteration

          要想再次读取这个文件,只能先重置这个指针,比如重新打开这个文件可以重置指针。

          open()打开的文件是一个可迭代对象,它有next(),它可以被for/in等迭代工具来操作,例如:

          1 >>> ‘first line\n‘ in open(‘a.txt‘)
          2 True

          所以更好的按行读取文件的方式是for line in open(‘file‘),不用刻意使用readline()等函数去读取。

          1 >>> for line in open(‘a.txt‘):
          2 ... print(line,end=‘‘)
          3 ...
          4 first line
          5 second line
          6 third line

          上面的print()设置了end=‘‘,因为读取每一行时会将换行符也读入,而print默认是自带换行符的,所以这里要禁止print的终止符,否则每一行后将多一空行。

          上面使用for line in open(‘a.txt‘)的方式是最好的,它每次只读一行到内存,在需要读下一行的时候再去文件中读取,直到读完整个文件也都只占用了一行数据的内存空间。

          也可以使用while去读取文件,并:

          1 >>> f=open(‘a.txt‘)
          2 >>> while True:
          3 ... line = f.readline()
          4 ... if not line: break
          5 ... print(line,end=‘‘)
          6 ...
          7 first line
          8 second line
          9 third line

          在Python中,使用for一般比while速度更快,它是C写的,而while是Python虚拟机的解释代码。而且,for一般比while要更简单,而往往Python中的简单就意味着高效。

          此外,还可以使用readlines()函数(和readline()不同,这是复数形式),它表示一次性读取所有内容到一个列表中,每一行都是这个大列表的一个元素。

          1 >>> lines = open(‘a.txt‘).readlines()
          2 >>> lines
          3 [‘first line\n‘, ‘second line\n‘, ‘third line\n‘]

          因为存放到列表中了,所以也可以迭代readlines()读取的内容:

          1 >>> for line in open(‘a.txt‘).readlines():
          2 ... print(line,end=‘‘)
          3 ...
          4 first line
          5 second line
          6 third line

          这种一次性全部读取的方式在大多数情况下并非良方,如果是一个大文件,它会占用大量内存,甚至可能会因为内存不足而读取失败。

          但并非必须要选择for line in open(‘a.txt‘)的方式,因为有些时候必须加载整个文件才能进行后续的操作,比如要排序文件,必须要拥有文件的所有数据才能进行排序。而且对于小文件来说,一次性读取到一个列表中操作起来可能会更加方便,因为列表对象有很多好用的方法。所以,不能一概而论地选择for line in open(‘a.txt‘)

          相关文章
          相关标签/搜索
          每日一句
            每一个你不满意的现在,都有一个你没有努力的曾经。
          公众号推荐
             一个历史类的公众号,欢迎关注
          一两拨千金
          二四六天天好彩免费资枓大全