IOError: [Errno 2] No such file or directory: but the files are there... IOError: [Errno 2]没有这样的文件或目录:但是文件是存在的...

15 浏览
0 Comments

IOError: [Errno 2] No such file or directory: but the files are there... IOError: [Errno 2]没有这样的文件或目录:但是文件是存在的...

如果你在下面的for循环中打印filename,它会给你返回目录中的所有文件名。但是当我调用pd.ExcelFile(filename)时,它返回没有名为[以\'.xlsx\'结尾的第一个文件的文件。我错过了什么吗?\n注:下面的缩进是正确的,在我的代码中if在for下面,但在这里显示不出来...\n

for filename in os.listdir('/Users/ramikhoury/PycharmProjects/R/excel_files'):
    if filename.endswith(".xlsx"):
        month = pd.ExcelFile(filename)
        day_list = month.sheet_names
        i = 0
        for day in month.sheet_names:
            df = pd.read_excel(month, sheet_name=day, skiprows=21)
            df = df.iloc[:, 1:]
            df = df[[df.columns[0], df.columns[4], df.columns[8]]]
            df = df.iloc[1:16]
            df['Date'] = day
            df = df.set_index('Date')
            day_list[i] = df
            i += 1
        month_frame = day_list[0]
        x = 1
        while x < len(day_list):
            month_frame = pd.concat([month_frame, day_list[x]])
            x += 1
        print filename + ' 创建了以下数据框:\n'
        print month_frame  # month_frame 是文件中所有表格合并成一个数据框!

0
0 Comments

问题原因:尝试从一个与列表不同的目录打开相对文件路径。使用os模块可能不是最佳选择,最好使用更高级的接口,如pathlib

解决方法1:pathlib是Python 3.4中添加的,如果使用较旧的Python版本,最好使用更旧的glob模块,其功能类似。

解决方法2:如果确实需要使用低级别的os接口,最佳解决方法是利用open的可选参数dir_fd

- 首先打开目标目录:dir_fd = os.open("/Users/ramikhoury/PycharmProjects/R/excel_files", os.O_RDONLY)

- 然后使用os.listdir(dir_fd)方法来遍历目录中的文件

- 在遍历过程中,使用os.open(file_name, os.O_RDONLY, dir_fd=dir_fd)来打开文件,这样以目标目录为基准打开文件

- 最后关闭目录:os.close(dir_fd)

解决方法3:将当前工作目录更改为目标目录,然后执行文件列表操作,最后将当前工作目录更改回原始目录。注意,这会引入竞态条件,因为original_cwd可能会被删除,或者该目录的访问控制可能会被更改,导致无法切换回原始目录。

以上是关于dir_fd的解决方法,dir_fd是Python 3.3中添加的。如果使用较旧的Python版本,建议使用glob而不是chdir解决方案。

更多关于dir_fd的内容可以参考这个非常有用的答案

0
0 Comments

问题描述:IOError: [Errno 2] No such file or directory: but the files are there...

在编程过程中,有时候会遇到文件找不到的错误,即IOError: [Errno 2] No such file or directory。尽管文件明明存在,但程序仍然无法找到它们。下面将分析这个问题出现的原因,并提供解决方法。

原因分析:

该问题的原因是由于代码中的"if"语句必须在"for"循环内部。具体来说,当我们使用"if"语句来检查文件是否存在时,如果将它放在循环之外,那么在循环之前就会检查文件的存在性。如果文件不存在,则会出现IOError: [Errno 2] No such file or directory错误。

解决方法:

将"if"语句放在"for"循环内部即可解决该问题。这样,每次循环时都会检查文件的存在性。如果文件不存在,程序会正确地捕获该错误并进行相应处理。

下面是一个示例代码,演示了如何正确地使用"if"语句来检查文件的存在性:

import os
file_names = ['file1.txt', 'file2.txt', 'file3.txt']
for file_name in file_names:
    if os.path.exists(file_name):
        # 文件存在时的处理逻辑
        print(f"File {file_name} exists.")
    else:
        # 文件不存在时的处理逻辑
        print(f"File {file_name} does not exist.")

在上述示例代码中,我们使用了`os.path.exists()`函数来检查文件是否存在。如果文件存在,则打印出"File [文件名] exists.";如果文件不存在,则打印出"File [文件名] does not exist."。

通过将"if"语句放在"for"循环内部,我们可以确保每次循环时都会正确地检查文件的存在性,从而避免出现IOError: [Errno 2] No such file or directory错误。

在编程过程中,当遇到IOError: [Errno 2] No such file or directory错误时,首先要检查代码中的"if"语句是否在"for"循环内部。如果不是,将"if"语句移至循环内部即可解决该问题。此外,还可以使用`os.path.exists()`函数来检查文件的存在性,保证程序的健壮性。

0
0 Comments

问题是您的工作目录与您正在列出的目录不同。由于您知道目录的绝对路径,最简单的解决方法是在文件顶部添加os.chdir('/Users/ramikhoury/PycharmProjects/R/excel_files')

当出现“IOError: [Errno 2] No such file or directory”错误时,意味着没有找到指定的文件或目录。在这种情况下,问题的原因是您的当前工作目录与您所尝试访问的目录不匹配。

解决该问题的方法是使用os.chdir()函数更改当前工作目录。通过将os.chdir('/Users/ramikhoury/PycharmProjects/R/excel_files')添加到文件的顶部,将当前工作目录更改为包含所需文件的目录。

os.chdir()函数的参数是要更改为的目录的绝对路径。在此示例中,绝对路径为'/Users/ramikhoury/PycharmProjects/R/excel_files'。通过将工作目录更改为包含所需文件的目录,您可以在不更改代码中文件路径的情况下访问这些文件。

在添加了os.chdir()之后,再次运行代码,应该不会出现"IOError: [Errno 2] No such file or directory"错误,并且您将能够成功访问所需的文件。

0