欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-30 10:13:52
场景:机器翻译,每行一个样本,包括中文句子和英文句子,中间由制表符(’\t’)分割def load_data(file): with open(file, 'r', encoding='utf-8') as f: text = f.read() print(type(text)) # # for line in text: # line = line.strip().split('\t...

场景:机器翻译,每行一个样本,包括中文句子和英文句子,中间由制表符(’\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类型,也就是把整个文本当成一个字符串,再迭代的话每次就只能取到这个字符串的一个字符,结果如下:
python按行读取数据时加read和不加read区别
无法达到按行读取数据的需求。因此要将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('************')

结果如下:
python按行读取数据时加read和不加read区别
参考:https://blog.csdn.net/liuyhoo/article/details/80756812

题外话:
split的作用
Python split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串
如果把上述程序的split()删掉的话:
python按行读取数据时加read和不加read区别
可见不再是一个包含两个字符串的列表,而是一个字符串,因为中间没有被split分开。
而且split分割字符串后会自动把分好的多个字符串放在一个列表

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

line = line.split('\t')

python按行读取数据时加read和不加read区别
strip把结尾的换行符删掉了

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