DorothyLi 发表于 2020-6-20 11:29:15

文件的读取方式read和for循环的区别

请问文件读取使用read和使用for循环有什么区别呢?

Twilight6 发表于 2020-6-20 11:30:33



你应该说的是 read 和 readline 吧?read 和 for 根本无法比较呀,是两个东西

liuzhengyuan 发表于 2020-6-20 11:32:33

read 是文件对象的一个函数,用于读取文件内容
for 是python 的一个关键字,只要用于迭代或循环

1223253411 发表于 2020-6-20 11:33:24

你也可以直接使用for循环来获取文件内容

因为open()返回的也是一个可迭代对象,所以可以参与for循环

DorothyLi 发表于 2020-6-20 11:35:13

Twilight6 发表于 2020-6-20 11:30
你应该说的是 read 和 readline 吧?read 和 for 根本无法比较呀,是两个东西

不是啊,就是用for循环可以打印出文件内容,而用f.read()也可以打印出文件内容,那选择哪种方式打印有什么区别?
零基础学python的第028讲动动手第一题
0. 尝试将文件(OpenMe.mp3)打印到屏幕上
答:直接使用打开文本文件的形式打开即可,至于为什么?打开后会告诉你@_@
f = open('OpenMe.mp3')
for each_line in f:
      print(each_line, end='')
f.close()

Twilight6 发表于 2020-6-20 11:36:27

本帖最后由 Twilight6 于 2020-6-20 11:43 编辑

DorothyLi 发表于 2020-6-20 11:35
不是啊,就是用for循环可以打印出文件内容,而用f.read()也可以打印出文件内容,那选择哪种方式打印有什 ...


哦那么   for 循环是可以直接迭代文件对象,但是是以行 迭代的

而 read 是直接读取整个文本,使文件指针移动到末尾

如果read() 后再用 for 就之后迭代一个一个的字符

正常情况你通过直接打开 mp3 文件会报错的,要以二进制打开,但是这里是因为这个mp3 文件本质是 txt 文本 ,只是将他的改成了 mp3 格式

txxcat 发表于 2020-6-20 11:45:08

read()是把整个文件读出,赋值后就是一个长字符串,包含文件的全部内容,用for来遍历则是以行为单位,遍历一次则读取一行,这个和readline()效果类似。
a=open('record.txt')
for i in a:
   print(i)
a=open('record.txt')
for i in a:
    print(a.readline())
这两段代码运行的效果是一样的。
顺便说一下,还有个readlines()小甲鱼没讲,这个是把整个文件以行为单位读出生成一个列表:
a=open('record.txt')
b=a.readlines()
for i in b:
    print(i)
这个运行效果同上面代码。

永恒的蓝色梦想 发表于 2020-6-20 11:45:15

for 循环和 反复 readline 差不多。

DorothyLi 发表于 2020-6-20 12:10:09

Twilight6 发表于 2020-6-20 11:36
哦那么   for 循环是可以直接迭代文件对象,但是是以行 迭代的

而 read 是直接读取整个文本,使 ...

我把把内容重新保存为txt格式后,for循环后指针也到了最后,用read()指针也到最后。
先read()再for循环迭代一个一个的字符不太明白,怎么去看他是一个字符一个字符的迭代的。因为打印出来的形式跟之前没差别。
我看到的用两种方法打印结果的区别是read()两行之间仅有一个空行,for是有三个空行。

Twilight6 发表于 2020-6-20 12:13:28

DorothyLi 发表于 2020-6-20 12:10
我把把内容重新保存为txt格式后,for循环后指针也到了最后,用read()指针也到最后。
先read()再for循环 ...

把 end 去掉你就会发现区别了,end 导致每次打印不自动换行

试着这样运行:
f = open('OpenMe.mp3')
x = f.read()
for each_line in x:
      print(each_line)
f.close()


f = open('OpenMe.mp3')
for each_line in f:
      print(each_line)
f.close()

DorothyLi 发表于 2020-6-20 12:17:03

txxcat 发表于 2020-6-20 11:45
read()是把整个文件读出,赋值后就是一个长字符串,包含文件的全部内容,用for来遍历则是以行为单位,遍历 ...

第二段代码打印出来的结果是一串回车,没有文字。
type(readlines())的结果是str,为什么说是一个列表?

DorothyLi 发表于 2020-6-20 12:23:17

Twilight6 发表于 2020-6-20 12:13
把 end 去掉你就会发现区别了,end 导致每次打印不自动换行

试着这样运行:

谢谢大佬!

Twilight6 发表于 2020-6-20 12:27:30

DorothyLi 发表于 2020-6-20 12:23
谢谢大佬!

客气了~!

我补充下 我刚刚叙述容易误解end 默认是等于 \n 换行符而我们重新赋值了 end = '' 空字符串 会覆盖之前的换行效果 所以就不会换行~

txxcat 发表于 2020-6-20 12:52:01

DorothyLi 发表于 2020-6-20 12:17
第二段代码打印出来的结果是一串回车,没有文字。
type(readlines())的结果是str,为什么说是一个列表? ...

运行第二段代码前先关闭之前打开的文件。
b=a.readlines()
type(b)

Marihanne 发表于 2024-1-31 11:39:00

打开text文件后
用for loop读取的数据会自动换行,且数据不会被存储;
x.read()读取的包含换行符/n,数据是一长串字符 不会换行,且读取的数据会被存储。

这样理解对吗

页: [1]
查看完整版本: 文件的读取方式read和for循环的区别