鱼C论坛

 找回密码
 立即注册
查看: 3318|回复: 14

[已解决]文件的读取方式read和for循环的区别

[复制链接]
发表于 2020-6-20 11:29:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请问文件读取使用read和使用for循环有什么区别呢?
最佳答案
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 格式
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-20 11:30:33 | 显示全部楼层


你应该说的是 read 和 readline 吧?  read 和 for 根本无法比较呀,是两个东西
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-20 11:32:33 | 显示全部楼层
read 是文件对象的一个函数,用于读取文件内容
for 是python 的一个关键字,只要用于迭代或循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-20 11:33:24 | 显示全部楼层
你也可以直接使用for循环来获取文件内容

因为open()返回的也是一个可迭代对象,所以可以参与for循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 格式
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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)
这个运行效果同上面代码。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-20 11:45:15 | 显示全部楼层
for 循环和 反复 readline 差不多。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-20 12:10:09 | 显示全部楼层
Twilight6 发表于 2020-6-20 11:36
哦那么   for 循环是可以直接迭代文件对象,但是是以行 迭代的

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

我把把内容重新保存为txt格式后,for循环后指针也到了最后,用read()指针也到最后。
先read()再for循环迭代一个一个的字符不太明白,怎么去看他是一个字符一个字符的迭代的。因为打印出来的形式跟之前没差别。
我看到的用两种方法打印结果的区别是read()两行之间仅有一个空行,for是有三个空行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

第二段代码打印出来的结果是一串回车,没有文字。
type(readlines())的结果是str,为什么说是一个列表?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-20 12:23:17 | 显示全部楼层
Twilight6 发表于 2020-6-20 12:13
把 end 去掉你就会发现区别了,end 导致每次打印不自动换行

试着这样运行:

谢谢大佬!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-20 12:27:30 | 显示全部楼层

客气了~!

我补充下 我刚刚叙述容易误解  end 默认是等于 \n 换行符  而我们重新赋值了 end = '' 空字符串 会覆盖之前的换行效果 所以就不会换行~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

运行第二段代码前先关闭之前打开的文件。
b=a.readlines()
type(b)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-31 11:39:00 | 显示全部楼层
打开text文件后
用for loop读取的数据会自动换行,且数据不会被存储;
x.read()读取的包含换行符/n,数据是一长串字符 不会换行,且读取的数据会被存储。

这样理解对吗

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-14 16:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表