python相对路径是相对于哪里
在学习 scrapy 时,保存数据到文件的时候,发现一直出现“找不到这样的文件或文件夹”的错误,最后发现是因为 python 的相对路径。
问题描述
学习 scrapy 时,编写 pipeline 来将数据保存到文件当中,代码如下:
1 | class NovelPipeline(): |
看着爬取时调试信息飞快闪过(爬取的东西有点多),却没有发现我准备好的 Novel 文件夹里面多出文件,连忙把爬虫停下来。发现出现了“找不到这样的文件或文件夹”的错误。
分析过程
查看日志信息,发现文件名是对的,但是为什么不行呢?
于是我在pipelines.py
里面写了测试代码:
1 | with open('Novel/'+'文件名'+'.txt','w') as f: |
发现同样的错误。
我把前面的文件夹去掉,也就是:
1 | with open('文件名'+'.txt','w') as f: |
发现文件生成在了我的工作目录下!
这个时候我才注意到相对路径的问题。
当前目录是这样的(略去无关文件):
- learn_scrapy
- 文件名.txt
- practice
- practice
- pipeline.py
- practice
我本来以为这个相对路径会使得文件生成在pipelines.py
的同级目录下,但是却生成在了我的 VScode 的工作文件夹?
我回忆起 java 课时老师写错相对路径导致无法显示图片的问题。那时也是需要相对当前项目的根目录来写相对路径的。我认为这是 eclipse 的特性。
会不会这个也是 vscode 的特性?
于是我搜索“python 相对路径”,找到了和我遇到类似问题的朋友:vscode 中使用 python 相对路径问题?-知乎
我的工作目录是/Work
我在工作目录中创建了文件/Work/Program/main.py 并且运行 main.py 生成了 file.txt 文件
1
2 with open('file.txt','w') as f:
f.write('HelloWorld')我以为 file.txt 在/Work/Program 路径下,和创建它的 main.py 在一个路径中
结果 file.txt 这个文件却在/Work 路径下面(/Work/file.txt),而不是我所期望的/Python/Program 路径下面
所以应该怎么配置,或者安装什么插件,能让 py 创建的文件在自己的相对路径下,而不是直接跑到了工作路径那里?
这个问题怎么解决啊,困扰了我好久,而我又比较喜欢 vscode 的界面不想放弃它。求解答!
看了回答之后我继续搜索,终于解决了困惑。
解决方案
参考链接:
Python 里写这种相对路径, 是相对于终端的当前目录的.
解决办法是, 获取脚本所在目录, 构造绝对路径
python相对路径是相对于哪里