试图读取与 python 文件相同目录中的文件,但出现 FileNotFoundError
attempting to read file in same directory as python file but getting FileNotFoundError
以上是和python同目录下的文件
文件正在 private_key.pem
python 文件 cloudfrontsignedcookie.py
在 cloudfrontsignedcookie.py
文件中,我们有以下代码
print('its about to happen yo.........................')
with open('private_key.pem', 'r') as file_handle:
private_key_string = file_handle.read()
print('here is the stuff')
print(private_key_string)
但是我收到以下错误:
File "/Users/bullshit/Documents/softwareprojects/shofi/backend/virtualshofi/backend/cloudfrontsignedcookie/cloudfrontsignedcookie.py", line 28, in generate_signed_cookies
return dist.create_signed_cookies(resource,expire_minutes=expire_minutes)
File "/Users/bullshit/Documents/softwareprojects/shofi/backend/virtualshofi/backend/cloudfrontsignedcookie/cloudfrontsignedcookie.py", line 89, in create_signed_cookies
with open('private_key.pem', 'r') as file_handle:
FileNotFoundError: [Errno 2] No such file or directory: 'private_key.pem'
我做错了什么?
有一个 posix 属性 称为“当前工作目录”,或 cwd
,有时简称为“工作目录”。当您 运行 一个脚本时,该脚本 运行 位于您 cwd
的上下文中,而不是脚本所在的路径。在交互式 shell 中,cwd
由当前 shell 会话所在的目录定义,而此 属性 由您 运行 中的任何命令继承那个互动环节。脚本的位置不同。请参阅此代码:
#!/usr/bin/env python3
from pathlib import Path
print(f'{Path.cwd()=}')
print(f'{Path(__file__).parent=}')
当我运行那个的时候,我看到了这个:
$ pwd # print working directory
/tmp
$ /Users/danielh/temp/2022-05-30/path-problem.py
Path.cwd()=PosixPath('/private/tmp')
Path(__file__).parent=PosixPath('/Users/danielh/temp/2022-05-30')
所以你可以看到,cwd
就是我当前的 shell 所在的位置。
有几种方法可以继续更改脚本以满足您的需要:
- 您可以将
private_key.pem
移动到您当前的工作目录
- 您可以让您的脚本在
Path(__file__).parent
中查找 private_key.pem
文件,这是您的脚本所在的目录
- 您可以使用命令行参数来指定查找
private_key.pem
的目录。我认为这是最好的路径。您还可以将此与选项 1 结合使用,如果省略参数,则使用当前工作目录作为默认目录。
以上是和python同目录下的文件
文件正在 private_key.pem
python 文件 cloudfrontsignedcookie.py
在 cloudfrontsignedcookie.py
文件中,我们有以下代码
print('its about to happen yo.........................')
with open('private_key.pem', 'r') as file_handle:
private_key_string = file_handle.read()
print('here is the stuff')
print(private_key_string)
但是我收到以下错误:
File "/Users/bullshit/Documents/softwareprojects/shofi/backend/virtualshofi/backend/cloudfrontsignedcookie/cloudfrontsignedcookie.py", line 28, in generate_signed_cookies
return dist.create_signed_cookies(resource,expire_minutes=expire_minutes)
File "/Users/bullshit/Documents/softwareprojects/shofi/backend/virtualshofi/backend/cloudfrontsignedcookie/cloudfrontsignedcookie.py", line 89, in create_signed_cookies
with open('private_key.pem', 'r') as file_handle:
FileNotFoundError: [Errno 2] No such file or directory: 'private_key.pem'
我做错了什么?
有一个 posix 属性 称为“当前工作目录”,或 cwd
,有时简称为“工作目录”。当您 运行 一个脚本时,该脚本 运行 位于您 cwd
的上下文中,而不是脚本所在的路径。在交互式 shell 中,cwd
由当前 shell 会话所在的目录定义,而此 属性 由您 运行 中的任何命令继承那个互动环节。脚本的位置不同。请参阅此代码:
#!/usr/bin/env python3
from pathlib import Path
print(f'{Path.cwd()=}')
print(f'{Path(__file__).parent=}')
当我运行那个的时候,我看到了这个:
$ pwd # print working directory
/tmp
$ /Users/danielh/temp/2022-05-30/path-problem.py
Path.cwd()=PosixPath('/private/tmp')
Path(__file__).parent=PosixPath('/Users/danielh/temp/2022-05-30')
所以你可以看到,cwd
就是我当前的 shell 所在的位置。
有几种方法可以继续更改脚本以满足您的需要:
- 您可以将
private_key.pem
移动到您当前的工作目录 - 您可以让您的脚本在
Path(__file__).parent
中查找private_key.pem
文件,这是您的脚本所在的目录 - 您可以使用命令行参数来指定查找
private_key.pem
的目录。我认为这是最好的路径。您还可以将此与选项 1 结合使用,如果省略参数,则使用当前工作目录作为默认目录。