虽然文件存在但未从 Python 中找到文件

问题描述 投票:0回答:4

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

import numpy as np

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

data = np.loadtxt(fname)

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

OSError: C:\path\DATA.txt not found.

我使用的是 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) 

仍然出现错误。

第二次编辑

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

BASE_FOLDER = r'Z:\Data\Enzo\Waste_Code'
BASE_NAME = r'run3b.txt'

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

os.chdir(BASE_FOLDER)
a = os.listdir()

然后选择正确的文件,

fname = a[1]

尝试导入时仍然出现错误。即使我直接从

listdir
检索它。

>> os.path.isfile(a[1])
False
python file-io
4个回答
5
投票

使用模块

os
,您可以通过运行

来检查Python中文件是否存在
import os
os.path.isfile(fname)

如果返回

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

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

处理文件时,建议使用基础库中内置的令人惊叹的功能,特别是模块

os
。无论您使用什么操作系统,
os.path.join()
都会处理连接。

fname = os.path.join(BASE_FOLDER, BASE_NAME)

此外,建议使用原始字符串,在字符串开头添加

r
。这在编写路径时不会那么乏味,因为它允许您从导航栏复制粘贴。它将类似于
BASE_FOLDER = r'C:\path'
。请注意,您不需要添加最新的“\”,因为
os.path.join
会处理它。


1
投票

您可能没有读取下载文件的完整权限。使用

sudo chmod -R a+rwx file_name.txt

如果您使用的是 Ubuntu,请在命令提示符下授予自己阅读权限。


0
投票

对我来说,问题是我在链接中使用了 Linux home 符号

(~/path/file)
。用绝对路径替换它
/home/user/etc_path/file
就像魅力一样。


0
投票

Python 解释器在运行时检查命令提示符中的路径

就像下面的例子

C:/Desktop/python_codes>python 代码.py

不同于

C:/桌面>python“python_code

© www.soinside.com 2019 - 2024. All rights reserved.