求助,[课后作业] 第028讲:文件
问题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: 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有啥区别呢? 问题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,应该是斜杠的方向问题,转义了,用\\,或者r'' 问题二,怎么好像没写错,应该是可以的吧,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()
问题2 :输出空白是因为你在代码中读取f4,文件指针被移到了文件末尾,再也读不出东西 \t是转义字符!!! 第一个问题是因为字符转移的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会帮你自动关闭
疾风怪盗 发表于 2020-9-8 23:44
问题1,应该是斜杠的方向问题,转义了,用\\,或者r''
谢谢解答 linke.zhanghu 发表于 2020-9-9 20:32
第一个问题是因为字符转移的bug.
建议改成f1 = open(r'F:\test.txt','w')或者f1 = open('F:/test.txt','w' ...
谢谢解答,写得很详细,感谢
五楼指明了\t,顿时就懂了,而且只能设置一个最佳,抱歉了 1q23w31 发表于 2020-9-9 06:49
问题2 :输出空白是因为你在代码中读取f4,文件指针被移到了文件末尾,再也读不出东西
谢谢解答 革命年 发表于 2020-9-9 19:18
\t是转义字符!!!
谢谢解答
页:
[1]