8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

open() 给出 FileNotFoundError / IOError: '[Errno 2] 没有这样的文件或目录'

user3529850 2月前

69 0

我正在尝试从我的 Python 脚本打开文件 recentUpdated.yaml。但是当我尝试使用:open('recentlyUpdated.yaml')时,我收到一条错误消息:IOError: [Errno 2] 没有这样的文件或目录:'

从我的 Python 脚本 recentlyUpdated.yaml 打开该文件

open('recentlyUpdated.yaml')

我收到一条错误消息:

IOError: [Errno 2] No such file or directory: 'recentlyUpdated.yaml'

为什么?我该如何解决这个问题?

帖子版权声明 1、本帖标题:open() 给出 FileNotFoundError / IOError: '[Errno 2] 没有这样的文件或目录'
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由user3529850在本站《csv》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 使用 PyCharm?============= 将 .csv 文件所在的文件夹标记为“源根”-> 右键单击​​该文件夹并选择“将目录标记为”,然后选择“源根”。此外,在运行/调试配置中检查工作目录 -> 运行菜单 -> 编辑配置 -> 在左窗格中选择 Python 文件 -> 确保工作目录是项目的根文件夹 [

  • 对我来说,问题在于我的文件是符号链接的。将文件夹复制到另一台不存在数据的计算机后,底层数据丢失。这让我学会了始终在终端中检查发生了什么。

  • 我希望能给 @Xetrov 投 10 个赞,这是一个隐藏的文件扩展名,让我很困惑。我试图运行 \'a.py\',但 Windows 中的实际文件名是 \'a.py.txt\'。

  • 让我解释一下Python如何查找文件:

    • 绝对 路径 是从计算机根目录开始的路径,例如 C:\Python\scripts 如果您使用的是 Windows。
    • 相对路径 不是 从计算机的根目录开始的路径,而是相对于所谓的 工作目录 .

    如果您尝试执行此操作 open('recentlyUpdated.yaml') ,Python 将看到您传递了一个相对路径,因此它将在当前工作目录中搜索该文件。

    诊断问题:

    • 确保文件存在(并且具有正确的文件扩展名):使用 os.listdir() 查看当前工作目录中的文件列表。
    • 确保你位于预期目录中 os.getcwd() .
      (如果您从 IDE 启动代码,您可能会位于不同的目录中。)

    然后您可以:

    • 调用 os.chdir(dir), 其中 dir 是包含文件的目录。这将更改当前工作目录。然后,仅使用其名称打开文件,例如 open("file.txt") .
    • 在您的调用中指定文件的绝对路径 open

    顺便一提:

    • 如果你的路径使用反斜杠, 请使用 原始字符串 r"" dir = r'C:\Python32'
      • If you don't use raw string, you have to escape every backslash: 'C:\\User\\Bob\\...'
      • Forward-slashes also work on Windows 'C:/Python32' and do not need to be escaped.

    例如:假设 file.txt C:\Folder .

    要打开它,您可以执行以下操作:

    os.chdir(r'C:\Folder')
    open('file.txt')  # relative path, looks inside the current working directory
    

    或者

    open(r'C:\Folder\file.txt')  # absolute path
    
  • 在 Linux 上,主目录路径(如 ~/)也不起作用。因此,您需要使用 /home/user/temp/file.txt 而不是 ~/temp/file.txt。

  • @Radek 是的,~ 是 shell 中的简写,而不是文件系统中的简写。如果希望 Python 扩展它,请使用 os.path.expanduser() 或 pathlib.Path.expanduser()。

  • os.chdir 会改变程序的全局状态,并可能在脚本的其他部分引入错误。我不建议这样做。

  • 最有可能的是,问题在于您使用 相对文件路径 打开文件,但 当前工作目录 未设置为您认为的那样。

    一个常见的误解是相对路径是相对于 Python 脚本的位置,但事实并非如此。相对文件路径始终相对于当前工作目录,并且当前工作目录不一定是 Python 脚本的位置。

    您有三个选择:

    • p3

      file = open(r'C:\path\to\your\file.yaml')
    • 页面4

      from pathlib import Pathscript_location = Path(__file__).absolute().parentfile_location = script_location / 'file.yaml'file = file_location.open()

      页面5

    • p6

      import osos.chdir(r'C:\path\to\your\file')file = open('file.yaml')

    可能导致“文件未找到”错误的其他常见错误包括:

    • p8

      path = 'C:\Users\newton\file.yaml'# Incorrect! The '\n' in 'Users\newton' is a line break character!

      p9

      path = r'C:\Users\newton\file.yaml'# Correct!

      p10

    • p11

      p12

  • 该文件可能存在,但路径可能不同。请尝试写入该文件的绝对路径。

    尝试 os.listdir() 函数检查至少 python 是否可以看到该文件。

    尝试一下:

    file1 = open(r'Drive:\Dir\recentlyUpdated.yaml')
    
  • 它似乎无法识别我电脑上的任何文件路径。有什么方法可以搜索文件吗?@sshekar

  • 可能您关闭了“file1”。
    只需使用“w”标志即可创建新文件:

    file1 = open('recentlyUpdated.yaml', 'w')
    

    mode 是一个可选字符串,用于指定打开文件的模式。默认为 'r',表示以文本模式打开并读取。其他常见值包括 'w',表示写入(如果文件已存在,则截断文件)...

    (另请参阅 https://docs.python.org/3/library/functions.html?highlight=open#open )

  • 了解绝对路径和相对路径

    路径一词含义与字面意思完全一致。它显示了需要采取的步骤,进入和退出文件夹以查找文件。路径上的每一步要么是文件夹名称,要么是特殊名称 . (表示当前文件夹),要么是特殊名称 .. (表示返回/退出父文件夹)。

    绝对相对这 两个术语 也有其通常的英语含义。相对路径表示某物 相对于 某个起点的位置;绝对路径是从顶部开始的位置。

    以路径分隔符开头的路径,或 以驱动器号后跟路径分隔符的 (如 C:/foo )都是绝对路径。(在 Windows 上,还有 UNC 路径 ,它们必然是绝对路径。大多数人永远不必担心这些。)

    在 Windows 上, C:foo 直接以文件或文件夹名称开头的路径,或者驱动器号后直接跟文件或文件夹名称(如

    了解“当前工作目录”

    相对路径是“相对于”所谓的 当前工作目录 (以下简称 CWD)。在命令行中,Linux 和 Mac 在所有驱动器上使用通用 CWD。( 整个文件系统 有一个通用的“根”,并且可能包括多个物理存储设备。)Windows 略有不同:它会记住每个驱动器的最新 CWD,并具有在驱动器之间切换的单独功能,从而恢复那些旧的 CWD 值。

    每个进程(包括终端/命令窗口)都有自己的 CWD。当从命令行启动程序时,它将获取终端/命令进程正在使用的 CWD。当从 GUI(通过双击脚本、将某些内容拖到脚本上或将脚本拖到 Python 可执行文件上)或使用 IDE 启动程序时,CWD 可能是任意数量的,具体取决于详细信息。

    重要的是,CWD 不一定 脚本所在的位置。

    使用 os.getcwd 检查 checked using os.getcwd ,并 modified using os.chdir 。每个 IDE 都有自己的规则来控制初始 CWD;有关详细信息,请查看文档。

    要将 CWD 设置为包含当前脚本的文件夹, 请确定该路径 ,然后进行设置:

    os.chdir(os.path.dirname(os.path.abspath(__file__)))
    

    验证实际的文件名和路径

    • p9

      p10

      p11

    • p12

    • p13

    • p14

    • 第15页

    • p16

  • 确保文件路径下的所有文件夹都存在。

    我收到此错误是因为我不知道该文件夹是否正在创建,因为理论上,代码中调用的函数应该执行此操作。

    import os
    
    file_path = input('Input file path')
    dir_path = os.path.dirname(file_path)
    
    os.makedirs(dir_path, exist_ok=True)
    
    with open(file_path) as file:
        file.write("Written!")
    

    在 OP 的例子中,他只是读取文件,因此它应该存在于他提供的路径中 。我们可能经常会忘记 w 打开函数的标志(例如 open('/path/to/file', 'w') ),最终导致此错误。

  • 检查提到的路径,无论它是绝对路径还是相对路径。

    如果类似于--> /folder/subfolder/file -->计算机将在根目录中搜索文件夹。

    如果类似于--> ./folder/subfolder/file -->计算机将在当前工作目录中搜索文件夹。

  • 如果您使用的是 VScode 之类的 IDE,请确保您从保存要访问的文件的同一目录打开了 IDE。

    例如,如果您想访问文档中的 file.txt,请尝试从文档中打开 IDE,方法是右键单击目录,然后单击“打开方式”

  • (适用于 Pycharm)

    Pycharm 有一个内置的“Active Directory”设置

    更改文件夹名称时可能会收到此错误,因为此设置未更新。要在 Pycharm 中修复此错误,请选择“编辑配置”(窗口右上角的“运行”按钮旁边)。

    Picture of "Edit Configurations"

    然后更改脚本路径(以防您还没有这样做)和工作目录文件夹。

    enter image description here

  • 可能出现故障的情况有多种:

    默认情况下 .stat() 使用 .stat(*, follow_symlinks=True) ;用于 .stat(follow_symlinks=False) 防止跟踪(损坏的)符号链接。

  • ayse 2月前 0 只看Ta
    引用 19

    这对我有用,对你也应该有用。

    #get current working directory
    os.getcwd()
    #trim till directory you want the resource till and get 0th from split
    os.getcwd().split(dir_in_str)[0]
    #list files and dirs inside dir
    os.listdir(dir_in_str)
    #append environment independent path seperator
    path = path + f'{os.path.sep}'
    #search if string is present or endswith in path
    if str in path:
    

    祝您编码愉快.. ;)

返回
作者最近主题: