IOError:[Errno 2]没有这样的文件或目录:但是文件在那里...

时间:2018-08-15 02:03:51

标签: python excel pandas file operating-system

如果确实在下面的#循环中注释了文件名,它将为您提供目录中的所有文件名。但是当我调用pd.ExcelFile(filename)时,它返回的文件名为:[第一个以'.xlsx'结尾的文件,我缺少什么? p.s:下面的缩进是正确的,if在我的代码中位于for之下,但此处未以这种方式显示。

@Override
protected void onResume() {
    super.onResume();

    nextFragment = (NextFragment) getSupportFragmentManager().findFragmentById(R.id.fragm);
    updateDetailFragmentTextViewWithIntentTag();
}

private void updateDetailFragmentTextViewWithIntentTag(){   nextFragment.updateTextView();

}

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

您的“ if”语句必须在for循环内

答案 2 :(得分:0)

问题是您试图从与列出目录不同的目录中打开相对文件路径。与其使用os,还不如使用像pathlib这样的更高级别的界面:

import pathlib
for file_name in pathlib.Path("/Users/ramikhoury/PycharmProjects/R/excel_files").glob("*.xslx"):
    # this produces full paths for you to use

pathlib是在Python 3.4中添加的,因此,如果您使用的是旧版本的python,则最好的选择是使用更老的glob模块,该模块的功能类似:

import glob
for file_name in glob.glob("/Users/ramikhoury/PycharmProjects/R/excel_files/*.xslx"):
    # this also produces full paths for you to use

如果出于某些原因您确实需要使用低级os接口,则解决此问题的最佳方法是使用open的{​​{3}}可选参数:< / p>

# open the target directory
dir_fd = os.open("/Users/ramikhoury/PycharmProjects/R/excel_files", os.O_RDONLY)
try:
    # pass the open file descriptor to the os.listdir method
    for file_name in os.listdir(dir_fd):
        # you could replace this with fnmatch.fnmatch
        if file_name.endswith(".xlsx"):
            # use the open directory fd as the `dir_fd` argument
            # this opens file_name relative to your target directory
            with os.fdopen(os.open(file_name, os.O_RDONLY, dir_fd=dir_fd)) as file_:
                # do excel bits here
finally:
    # close the directory
    os.close(dir_fd)

虽然您可以通过更改脚本顶部的目录来完成此修复(如另一个答案所建议),但这具有更改进程的当前工作目录的副作用,这通常是不希望的,并且可能产生负面影响。为了使这项工作没有副作用,需要您chdir回到原始目录:

# store cwd
original_cwd = os.getcwd()
try:
    os.chdir("/Users/ramikhoury/PycharmProjects/R/excel_files")
    # do your listdir, etc
finally:
    os.chdir(original_cwd)

请注意,这会在您的代码中引入竞争条件,因为original_cwd可能会被删除,或者该目录的访问控制可能会更改,从而您无法chdir回到它,这就是为什么dir_fd存在。

dir_fd是在Python 3.3中添加的,因此,如果您使用的是旧版本的Python,我建议您仅使用glob而不是chdir解决方案。

有关dir_fd的更多信息,请参见dir_fd