
# 读取文件报错，如何正确读取文件
#### 问题现象
- 创建训练作业如何读取"json"和"npy"文件。
- 训练作业如何使用cv2库读取文件。
- 如何在MXNet环境下使用torch包。
- 训练作业读取文件，出现如下报错：
  ```
  NotFoundError (see above for traceback): Unsuccessful TensorSliceReader constructor: Failed to find any matching files for xxx://xxx
  ```
  
 
#### 原因分析
在ModelArts中，用户的数据都是存放在OBS桶中，而训练作业运行在容器中，无法通过访问本地路径的方式访问OBS桶中的文件。
#### 处理方法
读取文件报错，您可以使用Moxing将数据复制至容器中，再直接访问容器中的数据。请参见步骤[1]。
您也可以根据不同的文件类型，进行读取。请参见[读取"json"文件]、[读取"npy"文件]、[使用cv2库读取文件]和[在MXNet环境下使用torch包]。
1. 读取文件报错，您可以使用Moxing将数据复制至容器中，再直接访问容器中的数据。具体方式如下：
   ```
   import moxing as mox
   mox.file.make_dirs('/cache/data_url')
   mox.file.copy_parallel('obs://bucket-name/data_url', '/cache/data_url')
   ```
   
2. **读取"json"文件** ，请您在代码中尝试如下方法：
   ```
   json.loads(mox.file.read(json_path, binary=True))
   ```
   
3. **使用"numpy.load"读取"npy"文件** ，请您在代码中尝试如下方法：
   - 使用MoXing API读取OBS中的文件
     ```
     np.load(mox.file.read(_SAMPLE_PATHS['rgb'], binary=True))
     ```
     
   
   - 使用MoXing的file模块对OBS文件进行读写
     ```
     with mox.file.File(_SAMPLE_PATHS['rgb'], 'rb') as f:
     np.load(f)
     ```
     
    
4. **使用cv2库读取文件** ，请您尝试如下方法：
   ```
   cv2.imdecode(np.fromstring(mox.file.read(img_path), np.uint8), 1)
   ```
   
5. **在MXNet环境下使用torch包** ，请您尝试如下方法先进行导包：
   ```
   import os
   os.system('pip install torch')
   import torch
   ```
   
 
