【问题标题】:Python script is returning FileNotFoundError on Mac, but not LinuxPython 脚本在 Mac 上返回 FileNotFoundError,但在 Linux 上没有
【发布时间】:2022-07-21 03:09:02
【问题描述】:

我的脚本出错了。我在 Linux (Ubuntu) 上,我的脚本运行良好......但是当我将它发送给使用 macOS 的人时,他们收到此错误:

FileNotFoundError: [Errno 2] 没有这样的文件或目录:'mytext.txt'`

with open('mytext.txt', 'r') as f:
    file = f.readlines()

当然,我(和 Google)都认为这是因为相对路径。我改成绝对路径了,还是一样的错误。

import os
with open(os.getcwd() + '/mytext.txt', 'r') as f:
    file = f.readlines()

好吧,那没用。继续搜索,我尝试了这个解决方案:

import os
path_name = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'mytext.txt')

with open(path_name, 'r') as f:
    file = f.readlines()

...但这也没有用。

关于为什么会这样的任何想法?脚本的每一次迭代都对我这个 Linux 用户有效,但对 macOS 用户无效。关于 Linux 和 macOS Python 脚本的交叉兼容性,我是否遗漏了什么,或者在我的实际代码中我做错了什么?是的,我确信在与我们俩的实际脚本完全相同的目录中有一个mytext.txt。谢谢你帮助我!

编辑:当试图在其他位置寻求有关此问题的帮助时,有人要求提供完整的错误信息。如果有帮助,这里是:

Traceback (most recent call last):
  File "/Volumes/drive2/test/mytext.py", line 15, in <module>
    with open(path_name, 'r') as f:
IOError: [Errno 2] No such file or directory: '/Volumes/drive2/test/mytext.txt'

重申一下,它对我(以及其他不在 macOS 上的人)来说很好用。错误仅适用于尝试在 macOS 上运行它的人。

【问题讨论】:

  • 用户如何运行脚本?试试cat mytest.txt
  • 您和其他用户是否都从同一目录运行脚本?在 MacOS 上,默认目录是用户运行脚本时所在的位置,而不是脚本的位置。我认为 Linux 也是这种情况(我现在无法检查),那么您是否可能已经在正确的目录中,或者您已经制作了 mytext.py 的副本,而您的朋友不是/还没有?
  • No such file or directory: '/Volumes/drive2/test/mytext.txt' - 文件根本不存在。请仔细检查。还有名称(可能的问题:尾随空格、同形文字、不可打印的字符)。
  • 老实说,我很惊讶它在任何地方都可以使用。要打开一个文件,您需要知道它在所有系统上的路径。你这里的路径都不是很“可靠”: os.getcwd() + '/mytext.txt' 是当前目录, os.path.abspath(file)), 'mytext.txt' 是python文件的兄弟。 Macos 与 Linux 文件方式相同。我建议您对 macos 实际文件名进行硬编码,然后从那里开始工作。 2 额外的东西:目录名称中是否有空格?文件的读取权限是什么?
  • 您是否将mytext.txt 连同您的代码一起发送给其他用户?其他用户可能没有文件mytext.txt。当您删除 mytext.txt 时,您的代码是否在您的计算机上运行?也许所有问题都在于您已经拥有mytext.txt,但其他用户没有。也许您的代码应该首先检查文件是否存在,然后读取它或通知该文件不存在 - 或者它应该创建空文件mytext.txt。您也可以使用os.listdir(folder) 查看文件夹中的其他用户。

标签: python linux macos


【解决方案1】:

所以我在这里测试了你在带有 jupyter notebook 的 macOS 上提出的这个解决方案:

import os
with open(os.getcwd() + '/mytext.txt', 'r') as f:
    file = f.readlines() 

它对我来说效果很好,所以这不是 macOS 问题。尝试运行它的人必须确保 notebook/python 脚本以及 .txt 文件都在同一个文件夹中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-07
    • 1970-01-01
    • 2012-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多