python按行读取数据时加read和不加read区别
场景:机器翻译,每行一个样本,包括中文句子和英文句子,中间由制表符(’\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