如何解决使用绝对路径打开文件时发生FileNotFoundError
我正在尝试迭代打开一些文件以对数据进行一些处理。但是,我无法使其工作。我不知道是什么原因造成的。
sd = os.path.dirname(os.path.abspath(__file__))
file_names = []
for root,d_names,f_names in os.walk(os.path.join(sd,path)):
for f in f_names:
if f.endswith('.csv'):
file_names.append(os.path.join(root,f))
for f_name in file_names:
with open(f_name,'r') as file:
...
我还使用pathlib
input_path = pathlib.Path(path)
file_names = input_path.glob('**/*.csv')
for f_name in file_names:
with open(f_name.resolve(),'r') as file:
...
这两种方法都会产生相同的结果。
'path'是与脚本位于同一目录的目录名称。读取错误似乎表明路径正确。这些文件位于有点复杂的文件结构中,有时文件名很长。
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\...
为了提供更多的见解,这里是path
path
¦-dir1
¦¦-dir2
¦¦¦-dir3
¦¦¦¦-sub1
¦¦¦¦¦-file-1a
¦¦¦¦-sub2
¦¦¦¦¦-file-1b
¦¦¦¦¦-file-2b
通过测试发现,当我将path
替换为dir3
以删除不必要的遍历时,脚本将处理file-1a
,这是该目录中唯一的目录,而{ {1}},但到达file-1b
时会给出相同的错误。此外,当将file-2b
设为目标时,它将毫无问题地处理sub2
内的所有文件。
此外,按照建议,我尝试在尝试打开文件之前添加行sub2
。事实证明,每次在出现错误之前(紧随文件路径之后)都会返回print(os.access(f_name,os.R_OK),repr(f_name))
,并在我设法处理文件时返回False
。
解决方法
非常感谢@ekhumoro为我指出了正确的方向。
似乎我的路径超过了260个字符,由于向后兼容的原因,Windows默认情况下不允许这样做。
我将Windows注册表更改为允许长路径,现在我的脚本在访问结构中的所有文件时没有问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。