问一个 Python 搜索文件路径的问题

2018-03-26 12:05:12 +08:00
 mathzhaoliang

在 python 中打开一个文件的时候,默认是先在当前目录下找。我想把当前目录下的一个子目录也加入搜索路径,应该怎么做呢?

比如说我在当前目录是这样的:

我想在 main.py 中写 with open('种子 1.txt', 'r') 的时候,python 既搜索当前目录,也能搜索 "岛国爱情片" 这个目录,我感觉可以直接 sys.path.append("岛国爱情片"),但是不成功,这个应该怎么写呢?

1726 次点击
所在节点    问与答
20 条回复
BingoXuan
2018-03-26 12:29:32 +08:00
你 sys.append('岛国爱情片')写的是绝对路径还是相对路径?
BingoXuan
2018-03-26 12:29:56 +08:00
@BingoXuan sys.path.append
mathzhaoliang
2018-03-26 12:36:53 +08:00
@BingoXuan 相对路径,我写的 sys.append("./岛国爱情片 /")
BingoXuan
2018-03-26 12:52:08 +08:00
@mathzhaoliang 我记得是不接受相对路径的,不妨试一下把路径打印出来看看。我建议设计路径统一写绝对路径,通过 main 的__file__来对子目录进行操作。可以试一下 sys.path.append(os.path.dirname(__file__) +'/岛国爱情片')增加路径。写得不优雅,你看看行不行。
mathzhaoliang
2018-03-26 12:54:28 +08:00
@BingoXuan 谢谢你的热心回复!我也是这么写的,确实可以。
BingoXuan
2018-03-26 12:54:31 +08:00
@BingoXuan
又漏了,要加上 os.path.abspath 方法判断绝对路径,然后用 os.path.dirname 方法获取所在文件夹路径,填上子目录就好了
mathzhaoliang
2018-03-26 12:56:22 +08:00
@BingoXuan 不对,刚才看错了,这样还是不行
mathzhaoliang
2018-03-26 12:56:55 +08:00
@BingoXuan 求详解
BingoXuan
2018-03-26 12:57:37 +08:00
@mathzhaoliang
现在接手的项目一堆路径坑,同事用 IDE 写的路径自动配置是没问题,问题一到生产环境就报路径错误,每次都要我改,改习惯了
mathzhaoliang
2018-03-26 13:00:02 +08:00
@BingoXuan 还没明白,为什么要 abspath 判断绝对路径呢?
scola
2018-03-26 13:01:33 +08:00
我之前写的, 把一个目录下包含子目录的所有 java 代码, 放到一个 txt 里面保存
你可以参考一下

https://gist.github.com/scola/6cb68ef9d0645c332a43f5ee14e02529
BingoXuan
2018-03-26 13:02:38 +08:00
@mathzhaoliang
把 sys.path 打印出来后,看看岛国爱情片的路径是不是有效的绝对路径。你加上 os.path.abspath 获取绝对路径了吗?
BingoXuan
2018-03-26 13:05:20 +08:00
@mathzhaoliang
因为 Python 内部一般用相对路径,但系统调用是绝对路径,所以增加路径时候一定要走绝对路径,不然系统并不知道真实路径
mathzhaoliang
2018-03-26 13:07:58 +08:00
@BingoXuan 打印出来以后显示子目录在 sys.path 里面,但是还是打不开。
mathzhaoliang
2018-03-26 13:13:57 +08:00
@BingoXuan

这样对否?

path = os.path.abspath(__file__)
path = os.path.dirname(path)
sys.path.append(path + '/岛国爱情片 /')
print(sys.path)
BingoXuan
2018-03-26 13:17:27 +08:00
@mathzhaoliang 这两天病了状态不好,也许我理解错了。我一开始理解是岛国爱情片里面的 py 模块,如果你是打开普通文件的话,使用 os.listdir 搜索对应文件,找到其绝对路径,再进行操作。
weeevv
2018-03-26 13:21:31 +08:00
glob 加 正则表达式?
mathzhaoliang
2018-03-26 13:22:26 +08:00
@BingoXuan 我不是要搜索单个文件,而是要把整个子目录里面的普通文件加入搜索路径,这样写 open(f, "r") 的时候只写 f 的文件名就行,不用再写路径。
BingoXuan
2018-03-26 13:36:45 +08:00
那就只可以通过一个函数遍历 sys.path 里面所有路径是否存在某一名字的文件了,sys.path 只负责 py 文件搜索不负责普通文件
mathzhaoliang
2018-03-26 13:41:50 +08:00
@BingoXuan 明白了,谢谢!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/441436

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX