python - Python:os.listdir OSError [Errno 5] 输入/输出错误:'tmp/json_folder'
问题描述
问题:
我有一个文件夹(json_folder_large),其中包含超过 200, 000 个 json 文件,另一个文件夹(json_folder_small)其中包含 10, 000 个 json 文件。
import os
lst_file = os.listdir("tmp/json_folder_large") # this returns an OSError
OSError: [Errno 5] Input/output error: 'tmp/json_folder_large'
将 listdir 与目录路径一起使用时出现OSError 。我确信路径没有问题,因为我可以在没有此 OSError 的情况下对另一个文件夹执行相同的操作。
lst_file = os.listdir("tmp/json_folder_small") # no error with this
环境:
上面的问题是docker image 作为 pycharm 解释器。
当解释器是conda env时,没有错误。
我可以看到的唯一区别是,在我的 docker/preferences/resources/advanced 中,我设置了 4 个 CPU(最大值为 6)和 32GB 内存(最大值为 64)。
我试过了:(在docker下)
1. 使用 Pathlib
import pathlib
pathlib.Path('tmp/json_folder_large').iterdir() # this returns a generator <generator object Path.iterdir at 0x7fae4df499a8>
for x in pathlib.Path('tmp/json_folder_large').iterdir():
print("hi")
break
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/usr/local/lib/python3.7/pathlib.py", line 1074, in iterdir for name in self._accessor.listdir(self):
OSError: [Errno 5] Input/output error: 'tmp/json_folder_large'
2.用os.scandir
os.scandir("tmp/json_folder_large") # this returns a generator <posix.ScandirIterator object at 0x7fae4c48f510>
for x in os.scandir("tmp/json_folder_large"):
print("hi")
break
Traceback (most recent call last):
File "<input>", line 1, in <module>
OSError: [Errno 5] Input/output error: 'tmp/json_folder_large'
3.将pycharm终端连接到docker容器,然后执行ls
docker exec -it 21aa095da3b0 bash
cd json_folder_large
ls
然后报错(当终端没有连接到docker容器时,上面的代码没有报错!!!!!)
ls: reading directory '.': Input/output error
问题:
- 真的是因为内存问题吗?
- 是否可以在所有内容都在同一目录下时解决此错误?(我看到我们可以将这些文件拆分到不同的目录中)
- 为什么我的代码在 docker 下引发错误而不是 conda env?
提前致谢。
解决方案
您可以使用os.scandir或glob.iglob。他们利用迭代器并避免将整个列表加载到内存中。
推荐阅读
- flutter - 如何在显示小部件时自动播放音频文件
- php - img 的来源:PHP 网站(VSCode 和 XAMPP)中的“/images/...”与“images/...”
- angular - 使用 Angular 前端部署 .NETCore API 时出错 - HTTP 错误 500.0 - ANCM 进程内处理程序加载失败
- android - 在一个查询中从两个表中删除而不加入
- git - 如何在 jenkins 多分支脚本管道中获取最新的 git 提交作者姓名或消息并在分支条件下使用
- javascript - 将值分配给计算属性 vuejs
- r - 如何在 R 中整个 data.frame 列的函数之间使用?
- python - Ebay 令牌和 GetDealItems API 调用问题
- java - 如何从java中的数组列表生成二维码并存储到数据库?
- laravel - Laravel [ErrorException] hash_file():读取 8192 字节失败,errno=13 权限被拒绝,Windows 操作系统