IOError: [Errno 2] No such file or directory: but the files are there... IOError: [Errno 2]没有这样的文件或目录:但是文件是存在的...
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 是文件中所有表格合并成一个数据框!
问题原因:尝试从一个与列表不同的目录打开相对文件路径。使用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
的内容可以参考这个非常有用的答案。
问题描述: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()`函数来检查文件的存在性,保证程序的健壮性。
问题是您的工作目录与您正在列出的目录不同。由于您知道目录的绝对路径,最简单的解决方法是在文件顶部添加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"错误,并且您将能够成功访问所需的文件。