如何修复 os.path.join(os.getcwd(), os.relpath('my_file')) 不返回 'my_file' 的路径?
How to fix os.path.join(os.getcwd(), os.relpath('my_file')) not returning the path to 'my_file'?
我有以下工作目录:/Users/jordan/Coding/Employer/code_base
,我想要获取其绝对路径的文件位于 /Users/jordan/Coding/Employer/code_base/framework/GTC/tests/day_document.json
。
我在文件 /Users/jordan/Coding/Employer/code_base/framework/GTC/tests/test.py
.
中有测试
目前,当我使用 os.path.join(os.getcwd(), os.path.relpath('day_document.json')
时,我得到 /Users/jordan/Coding/Employer/code_base/day_document.json
。我想获得 day_document.json
的正确文件路径,以便测试可以在 CI 中正常工作。该代码当前位于 运行ning 测试文件中,位于 /Users/jordan/Coding/Employer/code_base/framework/GTC/tests/test.py
.
我已经在 os.join
中尝试过 os.path.relpath('day_document.json')
和 os.path.abspath('day_document.json')
,return /Users/jordan/Coding/Employer/code_base/day_document.json
。我也进行了大量的谷歌搜索,但似乎无法找到任何人们获得正确答案的地方。当我使用 os.path.join(os.getcwd(), 'framework/GTC/tests/day_document.json')
时,我得到了正确的行为,但我不想硬编码文件路径。
这个有效:
day_document_file_location = os.path.join(os.getcwd(), 'framework/GTC/tests/day_document.json')
with open(day_document_file_location, 'r') as day_doc_json:
day_doc_endpoint._content = day_doc_json.read()
但我不明白为什么这不行:
day_document_file_location = os.path.join(os.getcwd(), os.path.relpath('day_document.json'))
with open(day_document_file_location, 'r') as day_doc_json:
day_doc_endpoint._content = day_doc_json.read()
我不得不提一下,当我从文件位置而不是工作目录 运行 时,后一个代码有效。
我想找到一种不对文件路径进行硬编码的方法,并且能够从工作目录中获取 /Users/jordan/Coding/Employer/code_base/framework/GTC/tests/day_document.json
。
根据[Python 3.Docs]: os.path.relpath(path, start=os.curdir)(强调是我的):
... This is a path computation: the filesystem is not accessed to confirm the existence or nature of path or start.
如果您不想硬编码 framework/GTC/tests/day_document.json(中间目录),则需要搜索该文件。一种方法是使用 [Python 3.Docs]: glob.iglob(pathname, *, recursive=False):
document_name = "day_document.json"
document_path = ""
for p in glob.iglob(os.path.join("**", document_name), recursive=True):
document_path = os.path.abspath(p)
break
if not document_path:
# Handle file not being present, e.g.:
raise FileNotFoundError(document_name)
不用说,如果在目录树中有多个同名文件,第 1st 个将被返回(并且不能保证它会被返回)你期待的那个)。
我有以下工作目录:/Users/jordan/Coding/Employer/code_base
,我想要获取其绝对路径的文件位于 /Users/jordan/Coding/Employer/code_base/framework/GTC/tests/day_document.json
。
我在文件 /Users/jordan/Coding/Employer/code_base/framework/GTC/tests/test.py
.
目前,当我使用 os.path.join(os.getcwd(), os.path.relpath('day_document.json')
时,我得到 /Users/jordan/Coding/Employer/code_base/day_document.json
。我想获得 day_document.json
的正确文件路径,以便测试可以在 CI 中正常工作。该代码当前位于 运行ning 测试文件中,位于 /Users/jordan/Coding/Employer/code_base/framework/GTC/tests/test.py
.
我已经在 os.join
中尝试过 os.path.relpath('day_document.json')
和 os.path.abspath('day_document.json')
,return /Users/jordan/Coding/Employer/code_base/day_document.json
。我也进行了大量的谷歌搜索,但似乎无法找到任何人们获得正确答案的地方。当我使用 os.path.join(os.getcwd(), 'framework/GTC/tests/day_document.json')
时,我得到了正确的行为,但我不想硬编码文件路径。
这个有效:
day_document_file_location = os.path.join(os.getcwd(), 'framework/GTC/tests/day_document.json')
with open(day_document_file_location, 'r') as day_doc_json:
day_doc_endpoint._content = day_doc_json.read()
但我不明白为什么这不行:
day_document_file_location = os.path.join(os.getcwd(), os.path.relpath('day_document.json'))
with open(day_document_file_location, 'r') as day_doc_json:
day_doc_endpoint._content = day_doc_json.read()
我不得不提一下,当我从文件位置而不是工作目录 运行 时,后一个代码有效。
我想找到一种不对文件路径进行硬编码的方法,并且能够从工作目录中获取 /Users/jordan/Coding/Employer/code_base/framework/GTC/tests/day_document.json
。
根据[Python 3.Docs]: os.path.relpath(path, start=os.curdir)(强调是我的):
... This is a path computation: the filesystem is not accessed to confirm the existence or nature of path or start.
如果您不想硬编码 framework/GTC/tests/day_document.json(中间目录),则需要搜索该文件。一种方法是使用 [Python 3.Docs]: glob.iglob(pathname, *, recursive=False):
document_name = "day_document.json"
document_path = ""
for p in glob.iglob(os.path.join("**", document_name), recursive=True):
document_path = os.path.abspath(p)
break
if not document_path:
# Handle file not being present, e.g.:
raise FileNotFoundError(document_name)
不用说,如果在目录树中有多个同名文件,第 1st 个将被返回(并且不能保证它会被返回)你期待的那个)。