鱼C论坛

 找回密码
 立即注册
查看: 1479|回复: 10

[已解决]求助,[课后作业] 第028讲:文件

[复制链接]
发表于 2020-9-8 23:34:03 | 显示全部楼层 |阅读模式
4鱼币
问题1:打开文件的方式

>>> f1 = open('F:\test.txt','w') #这样会报错

Traceback (most recent call last):
  File "<pyshell#24>", line 1, in <module>
    f1 = open('F:\test.txt','w')
OSError: [Errno 22] Invalid argument: 'F:\test.txt'


>>> f3 = open('F:\OpenMe.mp3','w') #这样正常,OpenMe.mp3这个文件是动动手0题的文件

也就是说一个\也行,只是支持特殊的文件么还是什么原因(实质都是txt文件吧)?  test.txt 和 OpenMe.mp3都在F盘存在



问题2:如何迭代打印出文件对象(f)中的每一行数据?

>>> f4 = open('F:/test.txt','r')
>>> f4.read()
'qqqqqqqqqqq\nwwwwwwwwww\neeeeeeeee\nrrrrrrr'
>>> for line in f4:
        print(line)  #方式1,输出空白

>>> for line in f4.readlines():
        print(line) #方式2,输出空白

不知道啥原因为啥输出空白,f4不是可迭代对象么?
还有默认是只读了‘r’,方式1和方式2有啥区别呢?
最佳答案
2020-9-8 23:34:04
问题1:打开文件的方式
>>> f1 = open('F:\test.txt','w') #这样会报错

这个错误原因是路径问题,python中,字符串内的'\'是转义字符,你的字符串内出现了'\t',被当做Tab了,所以路径就出错了。正常情况下,用字符串路径时,前面加一个r,表示是原字符串,即 f1 = open(r'F:\test.txt','w') ;或者反斜杠都用双反斜杠,表示是真的反斜杠,即 f1 = open('F:\\test.txt','w')

问题2:如何迭代打印出文件对象(f)中的每一行数据?

正常情况下,方式1能迭代输出,前提是你刚刚打开文件,光标在文件起始位置的时候,能这样迭代打印。
但是你的程序在这个for循环之前有一句 f4.read() ,这句直接读完了这个文件,此时光标在文件末尾,再向后就没内容了,你这时进行for循环当然读不到任何内容了。
f4=open(r'F:\test.txt','r')
f4.read()
f4.seek(0)# 把光标移动到起始位置
for line in f4:
    print(each)
上面这个可以迭代出每一行的内容,因为在迭代之前把光标移动回到起始位置了
方式2,是有问题的,假设光标不在文件末尾,那么方式2的for循环也只是读一行内容,把这一行内容迭代,逐个打印这一行的各个字符。

问题1,文件存在

问题1,文件存在

最佳答案

查看完整内容

这个错误原因是路径问题,python中,字符串内的'\'是转义字符,你的字符串内出现了'\t',被当做Tab了,所以路径就出错了。正常情况下,用字符串路径时,前面加一个r,表示是原字符串,即 f1 = open(r'F:\test.txt','w') ;或者反斜杠都用双反斜杠,表示是真的反斜杠,即 f1 = open('F:\\test.txt','w') 正常情况下,方式1能迭代输出,前提是你刚刚打开文件,光标在文件起始位置的时候,能这样迭代打印。 但是你的程序在这 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-8 23:34:04 | 显示全部楼层    本楼为最佳答案   
问题1:打开文件的方式
>>> f1 = open('F:\test.txt','w') #这样会报错

这个错误原因是路径问题,python中,字符串内的'\'是转义字符,你的字符串内出现了'\t',被当做Tab了,所以路径就出错了。正常情况下,用字符串路径时,前面加一个r,表示是原字符串,即 f1 = open(r'F:\test.txt','w') ;或者反斜杠都用双反斜杠,表示是真的反斜杠,即 f1 = open('F:\\test.txt','w')

问题2:如何迭代打印出文件对象(f)中的每一行数据?

正常情况下,方式1能迭代输出,前提是你刚刚打开文件,光标在文件起始位置的时候,能这样迭代打印。
但是你的程序在这个for循环之前有一句 f4.read() ,这句直接读完了这个文件,此时光标在文件末尾,再向后就没内容了,你这时进行for循环当然读不到任何内容了。
f4=open(r'F:\test.txt','r')
f4.read()
f4.seek(0)# 把光标移动到起始位置
for line in f4:
    print(each)
上面这个可以迭代出每一行的内容,因为在迭代之前把光标移动回到起始位置了
方式2,是有问题的,假设光标不在文件末尾,那么方式2的for循环也只是读一行内容,把这一行内容迭代,逐个打印这一行的各个字符。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-8 23:44:38 | 显示全部楼层
问题1,应该是斜杠的方向问题,转义了,用\\,或者r''
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-8 23:46:19 | 显示全部楼层
问题二,怎么好像没写错,应该是可以的吧,txt内容是怎么样的?

实例
以下实例演示了 readline() 方法的使用:

文件 runoob.txt 的内容如下:

1:www.runoob.com
2:www.runoob.com
3:www.runoob.com
4:www.runoob.com
5:www.runoob.com
循环读取文件的内容:

实例
#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 打开文件
fo = open("runoob.txt", "r")
print "文件名为: ", fo.name

for line in fo.readlines():                          #依次读取每行  
    line = line.strip()                             #去掉每行头尾空白  
    print "读取的数据为: %s" % (line)

# 关闭文件
fo.close()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-9 06:49:22 | 显示全部楼层

问题2 :输出空白是因为你在代码中读取f4,文件指针被移到了文件末尾,再也读不出东西
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-9 19:18:48 From FishC Mobile | 显示全部楼层
\t是转义字符!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-9 20:32:25 | 显示全部楼层
第一个问题是因为字符转移的bug.
建议改成f1 = open(r'F:\test.txt','w')或者f1 = open('F:/test.txt','w')也行 就是用/ 代替 \
第二个问题就是文件指针的问题
文件在使用完毕以后一定要记得关闭文件,或者重置文件指针,否则文件指针可能永远在最后,那么你在执行读操作的时候自然什么都读不到了.
建议改正
f1 = open(file='路径', mode='rt', encoding='utf-8')
f1.read()    # 读取整个文件,但是这个时候文件指针就在文件的末尾了.
f1.seek(0,0)    # 重置文件指针的位置,让文件指针到文件开头
for i in f1:
    print(i)    # 可以输出内容
f1.close()    # 切记一定要关闭文件.一定要关闭文件,一定要关闭文件.重要的事说三遍
或者改成
with open(file=路径, mode='rt', encoding='utf-8') as f1:
    res = f1.read()
    print(res)
    f1.seek(0,0)  # 调整文件指针
    for i in f1:
        print(i)

# 无需关闭文件,with会帮你自动关闭


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

使用道具 举报

 楼主| 发表于 2020-9-9 22:14:37 | 显示全部楼层
疾风怪盗 发表于 2020-9-8 23:44
问题1,应该是斜杠的方向问题,转义了,用\\,或者r''

谢谢解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-9-9 22:17:40 | 显示全部楼层
linke.zhanghu 发表于 2020-9-9 20:32
第一个问题是因为字符转移的bug.
建议改成f1 = open(r'F:\test.txt','w')或者f1 = open('F:/test.txt','w' ...

谢谢解答,写得很详细,感谢
五楼指明了\t,顿时就懂了,而且只能设置一个最佳,抱歉了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-9-9 22:18:13 | 显示全部楼层
1q23w31 发表于 2020-9-9 06:49
问题2 :输出空白是因为你在代码中读取f4,文件指针被移到了文件末尾,再也读不出东西

谢谢解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-9-9 22:29:08 | 显示全部楼层
革命年 发表于 2020-9-9 19:18
\t是转义字符!!!

谢谢解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-18 18:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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