1. 区别
在python中,我们使用open函数打开普通文件并创建了file对象,接着读取file对象有三种常用的方法:read(),readline(),readlines()。下面列出了用于读取file对象的函数read、readline、readlines区别:
- 从文件读取指定的字节数,size如果未给定或为负则读取所有。
file.read([size])
- 读取整行,包括”\n”字符
file.readline([size])
- 读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行。 实际读取值可能比sizeint较大,因为需要填充缓冲区。
file.readlines([sizeint])
2. 实例
现在我们有1个文件1.py
import sys
a = int(sys.argv[1])
b = int(sys.argv[2])
for i in range(a, b+1):
for j in range(2, i+1):
if i%j==0 and j<i:
print(i, '非素数')
break
elif j==i:
print(i, '素数')
- read
read([size])从文件当前位置起读取size个字节,若无参数size,则表示读取至文件结束为止。它的返回是字符串对象。
with open('1.py', 'r') as f:
print(type(f.read()))
print()
print(f.read())
'''输出
<type 'str'>
import sys
a = int(sys.argv[1])
b = int(sys.argv[2])
for i in range(a, b+1):
for j in range(2, i+1):
if i%j==0 and j<i:
print(i,'非素数')
break
elif j==i:
print(i,'素数')
'''
read读取文件的所有行,并原样返回文件行内容。
- readline
从字面意思可以看出,readline每次读取一行内容,所以读取时占用内存小,比较适合大文件。readline返回一个字符串对象。
with open('1.py', 'r') as f:
print(type(f.readline()))
print()
print(f.readline())
'''输出
<type 'str'>
import sys
'''
readline读取文件的一行,并原样返回一行内容。
- readlines
readlines读取文件的所有行,保存在一个列表(list)变量中。每1个文件行作为一个list元素,但读取大文件会比较占内存。
with open('1.py', 'r') as f:
print(type(f.readlines()))
print()
print(f.readlines())
'''输出
<type 'list'>
['import sys\n', '\n', 'a = int(sys.argv[1])\n', 'b = int(sys.argv[2])\n', '\n', 'for i in range(a, b+1): \n', ' for j in range(2, i+1):\n', ' if i%j==0 and j<i:\n', " print(i,'非素数')\n", ' break\n', ' elif j==i:\n', " print(i,'素数')\n"]
'''
readlines返回一个list,其中每一个文件行是一个字符串元素。
- linecache模块
当然若有特殊需求,还可以用linecache模块,比如你要输出某个文件的第n行:
import linecache
text = linecache.getline(‘1.py', 3)
print(text)
# 输出第3行
# a = int(sys.argv[1])
linecache读取大文件de效率还可以。
3. 参考文章
http://www.jb51.net/article/119907.htm
http://www.jb51.net/article/124355.htm