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__()**在读取到文件结尾的时候不是返回空字符串,而是直接抛出迭代异常:

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 "", line 1, in

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 "", line 1, in

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')。

成长离不开与优秀的同伴一起学习,如果你需要好的学习环境,好的学习资源,这里欢迎每一位热爱Python的小伙伴,Python学习圈

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值