read() 函数的基本语法格式如下:如果文件是以文本模式(非二进制模式)打开的,则 read() 函数会逐个字符进行读取;反之,如果文件以二进制模式打开,则 read() 函数会逐个字节进行读取。
file.read([size])
其中,file 表示已打开的文件对象;size 作为一个可选参数,用于指定一次最多可读取的字符(字节)个数,如果省略,则默认一次性读取所有内容。 Python教程
http://c.biancheng.net/python/
- #以 utf-8 的编码格式打开指定文件
- f = open("my_file.txt",encoding = "utf-8")
- #输出读取到的数据
- print(f.read())
- #关闭文件
- f.close()
#以 utf-8 的编码格式打开指定文件 f = open("my_file.txt",encoding = "utf-8") #输出读取到的数据 print(f.read()) #关闭文件 f.close()程序执行结果为:
Python教程
http://c.biancheng.net/python/
注意,当操作文件结束后,必须调用 close() 函数手动将打开的文件进行关闭,这样可以避免程序发生不必要的错误。
- #以 utf-8 的编码格式打开指定文件
- f = open("my_file.txt",encoding = "utf-8")
- #输出读取到的数据
- print(f.read(6))
- #关闭文件
- f.close()
#以 utf-8 的编码格式打开指定文件 f = open("my_file.txt",encoding = "utf-8") #输出读取到的数据 print(f.read(6)) #关闭文件 f.close()程序执行结果为:
Python
显然,该程序中的 read() 函数只读取了 my_file 文件开头的 6 个字符。再次强调,size 表示的是一次最多可读取的字符(或字节)数,因此,即便设置的 size 大于文件中存储的字符(字节)数,read() 函数也不会报错,它只会读取文件中所有的数据。
- #以二进制形式打开指定文件
- f = open("my_file.txt",'rb+')
- #输出读取到的数据
- print(f.read())
- #关闭文件
- f.close()
#以二进制形式打开指定文件 f = open("my_file.txt",'rb+') #输出读取到的数据 print(f.read()) #关闭文件 f.close()程序执行结果为:
b'Python\xe6\x95\x99\xe7\xa8\x8b\r\nhttp://c.biancheng.net/python/'
可以看到,输出的数据为 bytes 字节串。我们可以调用 decode() 方法,将其转换成我们认识的字符串。有关 bytes 字节串,读者可阅读《Python bytes类型》一节做详细了解。
io.UnsupportedOperation
异常,提示文件没有读取权限:
Traceback (most recent call last):
File "C:\Users\mengma\Desktop\file.py", line 3, in <module>
print(f.read())
io.UnsupportedOperation: not readable
UnicodeDecodeError
异常,其原因在于,目标文件使用的编码格式和 open() 函数打开该文件时使用的编码格式不匹配。UnicodeDecodeError
异常。
- #以二进制形式打开指定文件,该文件编码格式为 utf-8
- f = open("my_file.txt",'rb+')
- byt = f.read()
- print(byt)
- print("\n转换后:")
- print(byt.decode('utf-8'))
- #关闭文件
- f.close()
#以二进制形式打开指定文件,该文件编码格式为 utf-8 f = open("my_file.txt",'rb+') byt = f.read() print(byt) print("\n转换后:") print(byt.decode('utf-8')) #关闭文件 f.close()程序执行结果为:
b'Python\xe6\x95\x99\xe7\xa8\x8b\r\nhttp://c.biancheng.net/python/'
转换后:
Python教程
http://c.biancheng.net/python/
file.readline([size])
其中,file 为打开的文件对象;size 为可选参数,用于指定读取每一行时,一次最多读取的字符(字节)数。仍以前面章节中创建的 my_file.txt 文件为例,该文件中有如下 2 行数据:和 read() 函数一样,此函数成功读取文件数据的前提是,使用 open() 函数指定打开文件的模式必须为可读模式(包括 r、rb、r+、rb+ 4 种)。
Python教程
http://c.biancheng.net/python/
- f = open("my_file.txt")
- 读取一行数据
- byt = f.readline()
- print(byt)
f = open("my_file.txt") 读取一行数据 byt = f.readline() print(byt)程序执行结果为:
Python教程
由于 readline() 函数在读取文件中一行的内容时,会读取最后的换行符“\n”,再加上 print() 函数输出内容时默认会换行,所以输出结果中会看到多出了一个空行。
- #以二进制形式打开指定文件
- f = open("my_file.txt",'rb')
- byt = f.readline(6)
- print(byt)
#以二进制形式打开指定文件 f = open("my_file.txt",'rb') byt = f.readline(6) print(byt)运行结果为:
b'Python'
和上一个例子的输出结果相比,由于这里没有完整读取一行的数据,因此不会读取到换行符。readlines() 函数的基本语法格式如下:和 readline() 函数一样,readlines() 函数在读取每一行时,会连同行尾的换行符一块读取。
file.readlines()
其中,file 为打开的文件对象。和 read()、readline() 函数一样,它要求打开文件的模式必须为可读模式(包括 r、rb、r+、rb+ 4 种)。
- f = open("my_file.txt",'rb')
- byt = f.readlines()
- print(byt)
f = open("my_file.txt",'rb') byt = f.readlines() print(byt)运行结果为:
[b'Python\xbd\xcc\xb3\xcc\r\n', b'http://c.biancheng.net/python/']
content = []
with open('members.txt', 'r') as f:
for line in f.readlines():
line_list = line.strip('\n').split('\t') # 去除换行符,以制表符分隔
content.append(line_list)
keys = content[0]
for i in range(1, len(content)):
content_dict = {}
for k, v in zip(keys, content[i]):
content_dict[k] = v
print(content_dict)
{'Name': 'Andy', 'age': '32'}
{'Name': 'Bob', 'age': '20'}
{'Name': 'Jenny', 'age': '43'}
{'Name': 'Holly', 'age': '48'}
{'Name': 'Danie', 'age': '27'}