首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Ubuntu上运行Python bot (找不到文件或目录?)

在Ubuntu上运行Python bot (找不到文件或目录?)
EN

Stack Overflow用户
提问于 2020-08-04 20:56:09
回答 3查看 143关注 0票数 1

我在我的windows机器上运行了一个discord.py机器人,但我不能在Ubuntu上运行同样的机器人。我得到了一个"file not file error“,这是机器人中最早的错误之一:

storm = json.load(open(r'jsons\storms.json', 'r'))['wind']

但它确实存在。下面是回溯:

代码语言:javascript
复制
File "/root/bot/utility.py", line 6, in <module>
  storm = json.load(open(r'jsons\storms.json', 'r'))['wind']
FileNotFoundError: [Errno 2] No such file or directory: 'jsons\\storms.json'

这个机器人可以在我的Windows机器上运行,所以我假设Ubuntu或其他系统有一些不同,因为我已经将完整的机器人和所有文件复制到了Ubuntu系统上。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-08-04 21:03:28

您使用的是带有反斜杠\的硬编码Windows路由,在Unix/Linux中是斜杠/

您可以使用os.path.sep访问正确的分隔符,它将在Windows上返回\,在其他地方返回/

但可移植的方法是使用os.path的连接函数,如下所示:

代码语言:javascript
复制
import os

storms_path = os.path.join('jsons', 'storms.json')
storm = json.load(open(storms_path, 'r'))['wind']

这将使用正确的分隔符格式化您的路径,并将避免构建自己的路径时可能遇到的许多陷阱。

os.path docs here

票数 2
EN

Stack Overflow用户

发布于 2020-08-04 20:57:55

ubuntu使用'/'而不是'\'。因此,不是:

代码语言:javascript
复制
storm = json.load(open(r'jsons\storms.json', 'r'))['wind']

使用:

代码语言:javascript
复制
storm = json.load(open(r'jsons/storms.json', 'r'))['wind']

应该能行得通。

票数 1
EN

Stack Overflow用户

发布于 2020-08-04 21:20:16

与硬编码windows或linux样式的路径不同,您可能希望切换到使用python:https://docs.python.org/3/library/pathlib.html的pathlib标准库的更健壮的实现。

最小的示例如下所示:

代码语言:javascript
复制
from pathlib import Path
folder = Path("add/path/to/file/here/")
path_to_file = folder / "some_random_file.xyz"
f = open(path_to_file)

注意,一旦初始化了Path对象,您就可以很容易地使用/运算符来附加例如文件名。

在您的json文件示例中:

代码语言:javascript
复制
import json
from pathlib import Path
folder = Path("jsons/")
path_to_file = folder / "storms.json"
storm = json.load(open(path_to_file, 'r'))['wind']
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63247374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档