作者znmkhxrw (QQ)
看板Python
标题[问题] 获取.py档路径的方法差异(1000p)
时间Thu May 3 18:33:38 2018
请问一下,下面这两种获取当前路径的写法
PATH_1 = os.getcwd().replace('\\','/')+'/log'
PATH_2 = './log'
这两个path的差别是?
详细请看我下面的过程,谢谢!
------------------------------------------------
假设我现在有某个test.py档,路径为【C:/user/Desktop/folder/test.py】
而folder内除了有test.py,里面还有一个叫作log的资料夹
即 folder ─┬→ test.py
│
└→ log
而test.py里面内容为:
import os
import numpy as np
PATH_1 = os.getcwd().replace('\\','/')+'/log'
PATH_2 = './log'
arr = np.zeros(3)
np.save(PATH_1+"/1.npy", arr)
np.save(PATH_2+"/2.npy", arr)
则运行後会发现:
(1) print(PATH_1) 显示为 C:/user/Desktop/folder/log
print(PATH_2) 显示为 ./log
(2) log资料夹中确实有 1.npy 与 2.npy这个档案
由(1),(2)可知,即便字串是不同的,但是code运行到
np.save时,看到"./"会自动改成
当前路径,并非只是字串的"./"
是否可以推论,
要不要把"./"看成当前路径而不是字串的"./",单纯看该package的设定?
-------------------------------------------------------------------------
会这麽问是因为我有一份code在运行时
os.makedirs(
PATH)
shutil.rmtree(
PATH)
np.savetxt(
PATH,file)
plt.imsave(
PATH,file)
以上这四个对於我PATH是写PATH_1形式或是PATH_2形式都是一样且成功的
但是!
embedding.metadata_path =
PATH
embedding.sprite.image_path =
PATH
summary_writer = tf.summary.FileWriter(
PATH)
上面这三个跟tensorboard(tensorflow的工具)有关的指令
PATH 是 PATH_1形式的话 → 运行成功
PATH 是 PATH_2形式的话 → 运行失败
也因此才会有这篇问题...@@
-------------------------------------------------
文有点多,第一个解惑的板友1000p奉上,感谢!
目前我是猜测原因是tensorflow并没有把字串"./"翻译成当前路径
但是
"./"的解释会根据package不同而不同倒也是蛮奇怪的@@
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.128.169.29
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1525343620.A.0B9.html
1F:→ FakeGPS: 感觉是目前的位置跑掉了 所以用绝对路径才能确保无误 05/03 20:26
同时问楼上F大跟楼下S大
"."不是指 .py档所在路径 吗
这还算是《相对路径》?
因为像是os.getcwd() 不也是get current working directory
同样都是《获取module所在位址》
为什麽"."算是相对?
补充:
爬google後,好像"相对"的定义就是没有"完整位址"
虽然"."是指当前,但是不会有确切位址的字串所以把他归类在"相对"
2F:推 Sunal: 养成习惯,都用绝对路径就没问题 05/03 21:16
3F:→ Sunal: 路径的组合不要直接+ 都用os.path.join 05/03 21:18
4F:→ Sunal: 或是py3的pathlib 05/03 21:18
5F:→ Sunal: 这样linux windows都能够正确执行 05/03 21:19
6F:推 st1009: 你的问题漂亮到让我以为是教学文(大推 05/03 22:07
这...上个色而已^^"
7F:推 coeric: 回Sunal 我自己有点懒的用os.path.join 05/03 23:51
8F:→ coeric: 不管是Linux 或是windows 一律用 / 05/03 23:52
9F:→ TitanEric: 如果要用py档路径的话 可以用__file__搭配os.path.join 05/04 00:42
10F:→ TitanEric: 这样就不会错~ 05/04 00:42
11F:推 cphe: PATH1是绝对路径,PATH2是指当下.py的路径,没加./应该也行 05/04 09:51
是的 np.save("1.npy", arr) 可以我知道 而且他是相对路径
但是 np.save("./1.npy", arr) 我会把它认为是 "." + "/1.npy"
而"." = os.getcwd() = 获取当前位址
但是以字串来说,上面的等式是不相同的
或许应该理解成
"1.npy" 跟 "./1.npy"根本就是等价
-------------------------------------------------------------------
关於本问题,目前发现问题出在tensorflow本身的设定
embedding.metadata_path
embedding.sprite.image_path
这两个的预设路径
并非是跟随运行当中的.py路径
所以才会有问题
谢谢以上给建议的板友,每人200p表示谢意回家发,谢谢!
※ 编辑: znmkhxrw (219.87.142.254), 05/04/2018 10:02:30
12F:→ cphe: 运行失败的error msg是什麽? 05/04 10:02
13F:→ cphe: . 在windows就是指当下path,在cmd下打dir最前面就是 . 05/04 10:04
14F:→ cphe: 在linux有些情况你必须指明用./xxx 例如它是个执行档 05/04 10:05
15F:→ cphe: 不过你遇到的状况不确定是为什麽… 05/04 10:05
16F:推 Sunal: os.getcwd() 是绝对路径哦 05/04 11:24
17F:推 anticrime: 我理解是在路径叙述中 单纯"."是当下资料夹 ".."上一层 05/04 13:24
18F:→ anticrime: 资料夹 然後/是当分段看 所以./就会是当前路径往下跑 05/04 13:24