python相对路径是相对于哪里

在学习 scrapy 时,保存数据到文件的时候,发现一直出现“找不到这样的文件或文件夹”的错误,最后发现是因为 python 的相对路径。

问题描述

学习 scrapy 时,编写 pipeline 来将数据保存到文件当中,代码如下:

1
2
3
4
5
6
class NovelPipeline():
def process_item(self, item, spider):
with open('Novel/'+str(item['title'][0])+'.txt','w') as f:
for p in item['content']:
f.write(p+'\n')
return item

看着爬取时调试信息飞快闪过(爬取的东西有点多),却没有发现我准备好的 Novel 文件夹里面多出文件,连忙把爬虫停下来。发现出现了“找不到这样的文件或文件夹”的错误。

分析过程

查看日志信息,发现文件名是对的,但是为什么不行呢?

于是我在pipelines.py里面写了测试代码:

1
2
with open('Novel/'+'文件名'+'.txt','w') as f:
print(1)

发现同样的错误。

我把前面的文件夹去掉,也就是:

1
2
with open('文件名'+'.txt','w') as f:
print(1)

发现文件生成在了我的工作目录下!

这个时候我才注意到相对路径的问题。

当前目录是这样的(略去无关文件):

  • learn_scrapy
    • 文件名.txt
    • practice
      • practice
        • pipeline.py

我本来以为这个相对路径会使得文件生成在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相对路径是相对于哪里

https://yxchangingself.xyz/posts/python_relative_path/

作者

憧憬少

发布于

2019-06-27

更新于

2019-06-27

许可协议