尽管文件存在,但从 Python 中找不到文件

Enz*_*nzo 0 python file-io

我正在尝试将一个包含数字数组的简单文本文件加载到 Python 中。MWE 是

import numpy as np

BASE_FOLDER = 'C:\\path\\'
BASE_NAME = 'DATA.txt'
fname = BASE_FOLDER + BASE_NAME 

data = np.loadtxt(fname)
Run Code Online (Sandbox Code Playgroud)

但是,这在运行时会出现错误:

OSError: C:\path\DATA.txt not found.
Run Code Online (Sandbox Code Playgroud)

我使用的是 VSCode,因此在调试窗口中,可以单击路径链接。当然,如果我单击它,文件会正常打开,所以这告诉我路径是正确的。

另外,如果我这样做print(fname),VSCode 也会给我一个有效的路径。

我有什么遗漏的吗?

编辑

根据您的(对将来参考非常有帮助)评论,我使用os模块和原始字符串更改了我的代码:

BASE_FOLDER = r'C:\path_to_folder'
BASE_NAME = r'filename_DATA.txt'
fname = os.path.join(BASE_FOLDER, BASE_NAME) 
Run Code Online (Sandbox Code Playgroud)

结果还是报错。

第二次编辑

我用另一个文件再次尝试。非常基本的路径和文件名

BASE_FOLDER = r'Z:\Data\Enzo\Waste_Code'
BASE_NAME = r'run3b.txt'
Run Code Online (Sandbox Code Playgroud)

我再次遇到同样的错误。如果我尝试另一种方法,

os.chdir(BASE_FOLDER)
a = os.listdir()
Run Code Online (Sandbox Code Playgroud)

然后选择正确的文件,

fname = a[1]
Run Code Online (Sandbox Code Playgroud)

当我尝试导入它时仍然收到错误。即使我直接从 检索它listdir

>> os.path.isfile(a[1])
False
Run Code Online (Sandbox Code Playgroud)

小智 5

使用该模块,os您可以通过运行来检查 python 中文件是否存在

import os
os.path.isfile(fname)
Run Code Online (Sandbox Code Playgroud)

如果返回False,则意味着指定的 fname 中不存在您的文件。如果返回True,则应由 读取np.loadtxt()

额外:使用文件和路径的良好实践

处理文件时,建议使用基础库中内置的令人惊叹的功能,特别是模块osos.path.join()无论您使用什么操作系统,哪里都会处理连接。

fname = os.path.join(BASE_FOLDER, BASE_NAME)
Run Code Online (Sandbox Code Playgroud)

此外,建议通过在字符串开头添加 an 来使用r原始字符串。这在编写路径时不会那么乏味,因为它允许您从导航栏复制粘贴。它会是类似的东西BASE_FOLDER = r'C:\path'。请注意,您不需要添加最新的“\”,因为os.path.join它会被处理。