文本文件的读取操作 |
您所在的位置:网站首页 › c文件readline › 文本文件的读取操作 |
read( )函数
Python 提供了如下 3 种函数,它们都可以帮我们实现读取文件中数据的操作:
read() 函数:逐个字节或者字符读取文件中的内容,若有参数,则根据指定值读取字节或字符;
readline() 函数:逐行读取文件中的内容;
readlines() 函数:一次性读取文件中多行内容。
本节先讲解 read() 函数的用法,readline() 和 readlines() 函数会放到后续章节中作详细介绍。
Python read()函数
对于借助 open() 函数,并以可读模式(包括 r、r+、rb、rb+)打开的文件,可以调用 read() 函数逐个字节(或者逐个字符)读取文件中的内容。
如果文件是以文本模式(非二进制模式)打开的,则 read() 函数会逐个字符进行读取;反之,如果文件以二进制模式打开,则 read() 函数会逐个字节进行读取。 read() 函数的基本语法格式如下:file.read([size]) 其中,file 表示已打开的文件对象;size 作为一个可选参数,用于指定一次最多可读取的字符(字节)个数,如果省略,则默认一次性读取所有内容。举个例子,首先创建一个名为 my_file.txt 的文本文件,其内容为: Python教程 http://c.biancheng.net/python/ 然后在和 my_file.txt 同目录下,创建一个 file.py 文件,并编写如下语句: #以 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() 函数手动将打开的文件进行关闭,这样可以避免程序发生不必要的错误。 当然,我们也可以通过使用 size 参数,指定 read() 每次可读取的最大字符(或者字节)数,例如: #以 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() 函数也不会报错,它只会读取文件中所有的数据。 除此之外,对于以二进制格式打开的文件,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类型》一节做详细了解。 另外需要注意的一点是,想使用 read() 函数成功读取文件内容,除了严格遵守 read() 的语法外,其还要求 open() 函数必须以可读默认(包括 r、r+、rb、rb+)打开文件。举个例子,将上面程序中 open()的打开模式改为 w,程序会抛出io.UnsupportedOperation异常,提示文件没有读取权限:Traceback (most recent call last): File "C:\Users\mengma\Desktop\file.py", line 3, in print(f.read()) io.UnsupportedOperation: not readable read()函数抛出UnicodeDecodeError异常的解决方法 在使用 read() 函数时,如果 Python 解释器提示UnicodeDecodeError异常,其原因在于,目标文件使用的编码格式和 open() 函数打开该文件时使用的编码格式不匹配。举个例子,如果目标文件的编码格式为 GBK 编码,而我们在使用 open() 函数并以文本模式打开该文件时,手动指定 encoding 参数为 UTF-8。这种情况下,由于编码格式不匹配,当我们使用 read() 函数读取目标文件中的数据时,Python 解释器就会提示UnicodeDecodeError异常。 要解决这个问题,要么将 open() 函数中的 encoding 参数值修改为和目标文件相同的编码格式,要么重新生成目标文件(即将该文件的编码格式改为和 open() 函数中的 encoding 参数相同)。 除此之外,还有一种方法:先使用二进制模式读取文件,然后调用 bytes 的 decode() 方法,使用目标文件的编码格式,将读取到的字节串转换成认识的字符串。 举个例子: #以二进制形式打开指定文件,该文件编码格式为 utf-8f = 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/ readline( ) 函数 和 read() 函数不同,这 2 个函数都以“行”作为读取单位,即每次都读取目标文件中的一行。对于读取以文本格式打开的文件,读取一行很好理解;对于读取以二进制格式打开的文件,它们会以“\n”作为读取一行的标志。 Python readline()函数 readline() 函数用于读取文件中的一行,包含最后的换行符“\n”。此函数的基本语法格式为:file.readline([size]) 其中,file 为打开的文件对象;size 为可选参数,用于指定读取每一行时,一次最多读取的字符(字节)数。和 read() 函数一样,此函数成功读取文件数据的前提是,使用 open() 函数指定打开文件的模式必须为可读模式(包括 r、rb、r+、rb+ 4 种)。 仍以前面章节中创建的 my_file.txt 文件为例,该文件中有如下 2 行数据:Python教程 http://c.biancheng.net/python/ 下面程序演示了 readline() 函数的具体用法: 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( ) 函数 Python readlines()函数 readlines() 函数用于读取文件中的所有行,它和调用不指定 size 参数的 read() 函数类似,只不过该函数返回是一个字符串列表,其中每个元素为文件中的一行内容。和 readline() 函数一样,readlines() 函数在读取每一行时,会连同行尾的换行符一块读取。 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/'] 从文件members.txt中以字典形式读取数据,名字作为键,年龄作为值。文件中的内容如下,以制表符('\t')分隔数据 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'} |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |