python按行读取数据时加read和不加read区别

2022-08-09,,,,

场景:机器翻译,每行一个样本,包括中文句子和英文句子,中间由制表符(’\t’)分割

def load_data(file):
    with open(file, 'r', encoding='utf-8') as f:
        text = f.read()
        print(type(text))  # <class 'str'>
        # for line in text:
        #     line = line.strip().split('\t')
        #     print(line)
        #     print('************')

其中 r表示是文本文件,rb是二进制文件,默认为r
open()返回一个文件对象,它是可迭代的并且默认是按行迭代的!!!!
如果加了read()的话:
read() 每次读取整个文件,它通常用于将文件内容放到一个字符串变量中。如果文件大于可用内存,为了保险起见,可以反复调用read(size)方法,每次最多读取size个字节的内容。
在这里如果我们打印text的类型的话可见是str类型,也就是把整个文本当成一个字符串,再迭代的话每次就只能取到这个字符串的一个字符,结果如下:

无法达到按行读取数据的需求。因此要将read()删掉:

def load_data(file):
    with open(file, 'r', encoding='utf-8') as f:
        print(type(f))  # <class '_io.TextIOWrapper'>
        for line in f:
            line = line.strip().split('\t')
            print(line)
            print('************')

结果如下:

参考:https://blog.csdn.net/liuyhoo/article/details/80756812

题外话:
split的作用
Python split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串
如果把上述程序的split()删掉的话:

可见不再是一个包含两个字符串的列表,而是一个字符串,因为中间没有被split分开。
而且split分割字符串后会自动把分好的多个字符串放在一个列表

strip()的作用
Python strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。
参考:https://www.runoob.com/python/att-string-split.html
如果在上述结果中改成:

line = line.split('\t')

strip把结尾的换行符删掉了

本文地址:https://blog.csdn.net/kunAUGUST/article/details/107153773

《python按行读取数据时加read和不加read区别.doc》

下载本文的Word格式文档,以方便收藏与打印。