Unicode TensorFlow:使用gfile.FastGfile()方法可以';t不读取路径包含中文字符的文件

Unicode TensorFlow:使用gfile.FastGfile()方法可以';t不读取路径包含中文字符的文件,unicode,tensorflow,Unicode,Tensorflow,我想阅读并使用gfile.FastGFile(image_path,'rb').read()来阅读图片并将其作为我的项目的输入,我使用目录名作为目录中包含的这些图片的标签,当目录名为英文时,我的代码工作正常,但当目录名为中文时,它抛出以下错误: Traceback (most recent call last): File "F:/pythonWS/imageFilter/jpegFileJudge.py", line 27, in <module> image_data

我想阅读并使用
gfile.FastGFile(image_path,'rb').read()
来阅读图片并将其作为我的项目的输入,我使用目录名作为目录中包含的这些图片的标签,当目录名为英文时,我的代码工作正常,但当目录名为中文时,它抛出以下错误:

Traceback (most recent call last):
  File "F:/pythonWS/imageFilter/jpegFileJudge.py", line 27, in <module>
    image_data = gfile.FastGFile(image_path, 'rb').read()
    File "C:\Program Files\Python35\lib\site-
    packages\tensorflow\python\lib\io\file_io.py", line 106, in read
    self._preread_check()
    File "C:\Program Files\Python35\lib\site-
    packages\tensorflow\python\lib\io\file_io.py", line 73, in _preread_check
    compat.as_bytes(self.__name), 1024 * 512, status)
    File "C:\Program Files\Python35\lib\contextlib.py", line 66, in __exit__
    next(self.gen)
    File "C:\Program Files\Python35\lib\site-
    packages\tensorflow\python\framework\errors_impl.py", line 466, in 
    raise_exception_on_not_ok_status
    pywrap_tensorflow.TF_GetCode(status))
    tensorflow.python.framework.errors_impl.NotFoundError: NewRandomAccessFile 
    failed to Create/Open: F:\vsWorkspace\pics\test\三宝鸟
    \0ff41bd5ad6eddc403fa02d13bdbb6fd526633fe.jpg : 
    ϵͳ\udcd5Ҳ\udcbb\udcb5\udcbdָ\udcb6\udca8\udcb5\udcc4\udcceļ\udcfe\udca1\udca3
我的环境是Windows7 x64、python 3.5.3和TensorFlow 1.0,如何解决这个问题


顺便说一句,我必须使用中文目录的名称和图片标签。

在Tensorflow 1.0.1的Linux中,我能够用unicode字符读取具有相同路径的文件。问题可能是Python以底层操作系统(即Windows)不满意的方式规范化Unicode:也许您可以通过在第二个
for
循环中使用相对路径而不是绝对路径来解决这个问题?@音乐方面,非常感谢,这太神奇了!在我更改“gfile.FastGFile(image_path,'rb').read()”函数的内部“for”循环使用相对路径后,它可以正常工作,但我认为有时仅使用相对路径并不方便,例如当我想将路径用作参数时,我将整个路径合并到一个函数中,并在另一个函数中读取文件,当然,我们可以使用“os.path.chdir()”来保持“.”路径始终是文件所在的目录,但这会使代码非常糟糕,你认为是吗?是的,使用相对路径最多是一种解决方法。我个人会选择我的战斗,除非这是生产关键代码,并且它必须处理任意文件名。如果你想真正修复代码,你可以考虑找出你的操作系统()使用的规范化,然后明确地规范“<代码> IMAGEYPATH < /COD>”,就像我之前链接到<代码> gFiels.FASGFrase中的问题的答案所做的那样。非常感谢您的帮助。在使用Tensorflow 1.0.1的Linux中,我能够用unicode字符读取具有相同路径的文件。问题可能是Python以底层操作系统(即Windows)不满意的方式规范化Unicode:也许您可以通过在第二个
for
循环中使用相对路径而不是绝对路径来解决这个问题?@音乐方面,非常感谢,这太神奇了!在我更改“gfile.FastGFile(image_path,'rb').read()”函数的内部“for”循环使用相对路径后,它可以正常工作,但我认为有时仅使用相对路径并不方便,例如当我想将路径用作参数时,我将整个路径合并到一个函数中,并在另一个函数中读取文件,当然,我们可以使用“os.path.chdir()”来保持“.”路径始终是文件所在的目录,但这会使代码非常糟糕,你认为是吗?是的,使用相对路径最多是一种解决方法。我个人会选择我的战斗,除非这是生产关键代码,并且它必须处理任意文件名。如果你想真正修复代码,你可以考虑找出你的操作系统()使用的规范化,然后明确地规范“<代码> IMAGEYPATH < /COD>”,就像我之前链接到<代码> gFiels.FASGFrase中的问题的答案所做的那样。非常感谢你的帮助。
# -*- coding: utf-8 -*-
import glob
import os
import random
import numpy as np
import tensorflow as tf
from tensorflow.python.platform import gfile
image_folder='F:/vsWorkspace/pics/test'
os.chdir(image_folder)
count=0
for each in os.listdir(image_folder):
    each=os.path.abspath(each)
    os.chdir(each)
    for image_path in os.listdir(each):
        image_path = os.path.abspath(image_path)
        print(image_path)
        image_data = gfile.FastGFile(image_path, 'rb').read()
        count += 1
os.chdir(image_folder)