IOError:[Errno 2]没有这样的文件或目录(当它确实存在时)Python [重复]

Posted

技术标签:

【中文标题】IOError:[Errno 2]没有这样的文件或目录(当它确实存在时)Python [重复]【英文标题】:IOError: [Errno 2] No such file or directory (when it really exist) Python [duplicate] 【发布时间】:2018-02-01 21:06:41 【问题描述】:

我正在通过 python 中的 uart 传输文件的文件夹。下面你会看到简单的功能,但有一个问题,因为我得到了标题中的错误:IOError: [Errno 2] No such file or directory: '1.jpg' 其中 1.jpg 是测试文件夹中的文件之一。所以这很奇怪,因为程序知道它不存在的文件名?!我做错了什么?

def send2():
    path = '/home/pi/Downloads/test/'
    arr = os.listdir(path)
    for x in arr:
        with open(x, 'rb') as fh:
            while True:
                # send in 1024byte parts
                chunk = fh.read(1024)
                if not chunk: break
                ser.write(chunk)

【问题讨论】:

还有***.com/questions/9765227/…和***.com/questions/36477665/… 也许改用glob.glob('/home/pi/Downloads/test/*')... 【参考方案1】:

如果文件不在您的工作目录中,您需要提供要打开的文件的实际完整路径:

import os
def send2():
    path = '/home/pi/Downloads/test/'
    arr = os.listdir(path)
    for x in arr:
        xpath = os.path.join(path,x)
        with open(xpath, 'rb') as fh:
            while True:
                # send in 1024byte parts
                chunk = fh.read(1024)
                if not chunk: break
                ser.write(chunk)

【讨论】:

【参考方案2】:

os.listdir() 只返回裸文件名,而不是完全限定的路径。这些文件(可能?)不在您当前的工作目录中,因此错误消息是正确的——文件不存在于您要查找的位置。

简单修复:

for x in arr:
    with open(os.path.join(path, x), 'rb') as fh:
        …

【讨论】:

【参考方案3】:

是的,代码引发错误,因为您打开的文件不在运行 python 代码的当前位置。

os.listdir(path) 返回给定位置的文件和文件夹名称列表,而不是完整路径。

使用os.path.join()for 循环中创建完整路径。 例如

file_path = os.path.join(path, x)
with open(file_path, 'rb') as fh:
       .....

文档:

    os.listdir(..) os.path.join(..)

【讨论】:

以上是关于IOError:[Errno 2]没有这样的文件或目录(当它确实存在时)Python [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python IOError 中的错误:[Errno 2] 没有这样的文件或目录:'data.csv' [重复]

以“w”模式打开文件:IOError:[Errno 2]没有这样的文件或目录

'对于文件名中的文件名:'导致IOError:[Errno 2]没有这样的文件或目录:'t'python [duplicate]

解决IOError: [Errno 28] No space left on device(设备空间不足)

如何解决打开文件时出现IOError[errno 17]文件?

qpython android IOError: [Erno 2] 没有这样的文件或目录