写在前面:
前面的案例不想看可以直接看结尾的4个结论。
直接看第4个结论,就是文章的最后。二八定律。【方法4通用性极强】
快速跳转至 通用性方法4
qq:1981791622。
备注:我是csdn道友
源代码:
with open ("pi_digits.txt","r") as file_object:#注意是c:\\文件夹1\\文件夹2,不是c:\,一定要记住!!!
contents = file_object.read()
print(contents)
#>>>
filenotfounderror: [errno 2] no such file or directory: 'pi_digits.txt'
由no such file or directory分析,文件是有的,那就是路径。
该怎么修改?如下:
因此完整路径是:
c:\users\yjg\desktop\pi_digits.txt
多说一句:要找到你的文件地址,只需要把你要打开的文件直接拖到编辑器终端的窗口里,就会显示出文件地址,然后复制一下就好。(这个操作秀)
于是修改代码:
with open ("c:\users\yjg\desktop\pi_digits.txt","r") as file_object:#注意是c:\\文件夹1\\文件夹2,不是c:\,一定要记住!!!
contents = file_object.read()
print(contents)
还是报错:报错原因是路径,且往下文看。
由c语言的学习经验,将路径修改如下:
c:\\
users\\
yjg\\
desktop\\
pi_digits.txt
对比
c:\users\yjg\desktop\pi_digits.txt
多了一个\。
再看结果,报错我打嘴:
with open ("c:\\users\\yjg\\desktop\\pi_digits.txt","r") as file_object:#注意是c:\\文件夹1\\文件夹2,不是c:\,一定要记住!!!
contents = file_object.read()
print(contents)
为什么加了一个斜杠\就解决报错了?答案先不说,请先思考3秒:
3。。。。2。。。。。1
答案超级简单:转义字符啊。
正确路径是:
c:\users\yjg\desktop\pi_digits.txt
用字符串表示,注意一个细节是:"\\"
------>\
此时,你是不是马上恍然大悟。赶紧关注我,为思考点赞!
所以,用字符串表示c:\users\yjg\desktop\pi_digits.txt
是
"c:\\users\\yjg\\desktop\\pi_digits.txt"
最后结果成功出现也验证了这个原理。
多说一点:敲黑板!!!总结!!!
因为单独一个"\
",在python中带有转义字符的意思。如:’\t’就代表按下一个tab键,"\\"
就表示\
,"\b"表示退格。
在windows操作系统中,路径分隔符有两种:一种用\\
,另一种是用/,你也可以只用一个/来分隔路径。
来一起看一下效果:
with open ("c:/users/yjg/desktop/pi_digits.txt","r") as file_object:#注意是c:\\文件夹1\\文件夹2,不是c:\,也可以用/。
contents = file_object.read()
print(contents)
还可以加个 r ,如下:
with open (r"c:\users\yjg\desktop\pi_digits.txt") as file_object: # 加个r
contents = file_object.read()
print(contents.strip())
小结:
在windows操作系统中,路径分隔符有两种:一种用\\
,另一种是用/。
但是呢,别忘了\在python中是转义字符,所以时常会有冲突。为了避坑,windows的绝对路径通常要稍作处理,写成以下三种格式;
格式1:常用,尤其是做项目的时候。推荐使用。
with open (r"c:\users\yjg\desktop\pi_digits.txt") as file_object:
contents = file_object.read()
print(contents.strip())
格式2:
with open ("c:\\users\\yjg\\desktop\\pi_digits.txt") as file_object:
contents = file_object.read()
print(contents.strip())
格式3:
with open ("c:/users/yjg/desktop/pi_digits.txt") as file_object:
contents = file_object.read()
print(contents.strip())
#============================= 通用性强 =============================
方法4:【懒,一劳永逸,通用性强】
import os
import sys
base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, base_dir)
### 下面是你 with open()函数的相关代码
with open("pi_digits.txt") as f:
contents = f.read()
print(contents)
通用性方法4
补充第4种方法,先给代码,不讲原理:
import os
import sys
base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, base_dir)
### 下面是你 with open()函数的相关代码
with open("pi_digits.txt") as f:
contents = f.read()
print(contents)
你只需这样做:【你只管复制粘贴,啥都不用改,4条命令通用的】
【复制粘贴以下4行代码到你报错文件的头四行即可】
import os
import sys
base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, base_dir)
有了上面的四行代码就可以解决这类的问题。通用性极强。【在python中遇到这类问题,无脑复制粘贴上面4行代码到报错文件的头四行即可解决问题】
复制粘贴后再运行你的py
文件 头四行,报错我打嘴。
另外,在python中出现以下问题也可以通过上面的4条命令来解决:
问题:
modulenotfounderror: no module named xxx
解决:
import os
import sys
base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, base_dir)
# 在报错文件的头四行添加上述4条命令即可解决问题
复制粘贴后再运行你的py
文件 头四行,报错我打嘴。
下面的内容可看可不看。
也就是说,你在你报错的写 with open()
的py
文件中,头四行,必须是头四行添加以下代码,就可以 以文件名 的方式 读取文件里的内容:
import os
import sys
base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, base_dir)
### 下面是你 with open()函数的相关代码
with open("pi_digits.txt") as f:
contents = f.read()
print(contents)
一句话,凡是遇到filenotfounderror: [errno 2] no such file or directory: 'pi_digits.txt'
这种问题,直接在该文件的头四行添加上面的4行代码即可完美解决问题。不用管你路径是什么。
第4种方法需要你懂python解释器是如何找到文件的路径的。
关于这一点,我有2点要说:【知道你懒得研究原理】
1.你其实无需关心 懂python解释器是如何找到文件的路径的
这句话是否理解,因为编程最重要的是先把功能实现跑起来,管他三七二十一
2.如果你想了解 懂python解释器是如何找到文件的路径的
这句话的答案