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(设备空间不足)