python - /和\ windows和ubuntu的python解释
问题描述
我开发了一个在图表上显示信息的烧瓶应用程序。
- 视窗 10
- 蟒蛇 3.6.6
- 康达 4.5.4
然后我将应用程序部署在:
- Ubuntu 服务器 18.04
- 康达 4.5.4
- 蟒蛇3.6.6
然后我尝试执行该应用程序,但由于某种原因,我在 ubuntu 上遇到了我在 Windows 上没有遇到的错误。这些错误之一与对文件的访问有关。
FileNotFoundError: [Errno 2] No such file or directory: '/home/myuser/projects/myflaskappe/mod_on/queries\\prices.sql'
我访问该文件并且它在那里,用户有权访问它。然后我决定修改引用该文档的 python 代码:
# original code
data_objects = {'prices': {
'sql-path': r'queries\prices.sql',
'source': 'my_db',
'flavor': 'mysql'}
}
我发现如果我修改代码\
,/
那么它可以完美地工作。
# modified code
data_objects = {'prices': {
'sql-path': r'queries/prices.sql',
'source': 'my_db',
'flavor': 'mysql'}
}
如果您注意到,我只需要修改\
for/
以使其工作。
这是为什么?
还有一些与此类似的其他问题,我无法理解它们为什么会发生。
解决方案
原因是 Windows 和 *nix 使用不同的字符作为文件路径。在 Windows 中是\
,而在 *nix 中是/
.
为了使您的代码跨平台兼容,您应该考虑使用os.path.join()
. 例如:
import os
print(os.path.join("queries", "prices.sql"))
这将在 *nix 上为您提供“queries/prices.sql”,在 Windows 上为您提供“queries\prices.sql”。
推荐阅读
- c# - Unity [Command] 功能不执行 - UNet
- javascript - html,js:使用来自arraylist的值填充表单字段并将此arraylist保存在servlet中
- jquery - 如何根据数据属性隐藏 div
- tsql - T-SQL (AVG) 每 10 行
- macos - 在 mac 上进行选择以看起来像选择窗口
- jquery - Vue2 + jQuery + jQuery UI
- triggers - 是否可以在 Zabbix 中调试特定的触发器?
- actions-on-google - 如何触发电子邮件发送
- laravel - 每个套接字地址只有一种用法 - Laravel
- javascript - 级联下拉列表显示字典/数组