原文地址:

https://zhuanlan.zhihu.com/p/31536538

-------------------------------------------------------------------------------

一、gfile模块是什么

gfile模块定义在tensorflow/python/platform/gfile.py,但其源代码实现主要位于tensorflow/tensorflow/python/lib/io/file_io.py,那么gfile模块主要功能是什么呢?我们看到gfile.py里有那么一句简单的话“File I/O wrappers without thread locking.”用来描述gfile,翻译过来是"无线程锁的文件I/O操作包装器",可还是不明就里。于是,到google上搜索该模块的功能,

找到如下描述:

Why use tensorflow gfile? (for file I/O)

翻译过来就是(我的翻译水平还有待提高,哈哈,暂且看看吧):

  • 1、提供了一种类似于python文件操作的API;
  • 2、提供了一种操作tensorflow C++文件系统的API;
  • tensorflow c++文件操作接口支持多个文件系统实现,包括本地文件谷歌云存储(以gs://开头)和HDFS(以HDFS://开头),tensorflow封装这些接口到tf.gfile,以便我们可以使用这些接口来存储和加载检查点文件、将tensorboard log信息写到文本里以及访问训练数据(在其他用途里)。但是,如果所有文件都放在本地,那么我们直接使用python提供的常规文本操作接口也是一样效果且毫无问题的!

这应该就是Google对gfile模块的说明了!

二、gfile API介绍

下面将分别介绍每一个gfile API!

2-1)tf.gfile.Copy(oldpath, newpath, overwrite=False)

拷贝源文件并创建目标文件,无返回,其形参说明如下:

oldpath:带路径名字的拷贝源文件;

newpath:带路径名字的拷贝目标文件;

overwrite:目标文件已经存在时是否要覆盖,默认为false,如果目标文件已经存在则会报错

2-2)tf.gfile.MkDir(dirname)

创建一个目录,dirname为目录名字,无返回。

2-3)tf.gfile.Remove(filename)

删除文件,filename即文件名,无返回。

2-4)tf.gfile.DeleteRecursively(dirname)

递归删除所有目录及其文件,dirname即目录名,无返回。

2-5)tf.gfile.Exists(filename)

判断目录或文件是否存在,filename可为目录路径或带文件名的路径,有该目录则返回True,否则False。

2-6)tf.gfile.Glob(filename)

查找匹配pattern的文件并以列表的形式返回,filename可以是一个具体的文件名,也可以是包含通配符的正则表达式。

2-7)tf.gfile.IsDirectory(dirname)

判断所给目录是否存在,如果存在则返回True,否则返回False,dirname是目录名。

2-8)tf.gfile.ListDirectory(dirname)

罗列dirname目录下的所有文件并以列表形式返回,dirname必须是目录名。

2-9)tf.gfile.MakeDirs(dirname)

以递归方式建立父目录及其子目录,如果目录已存在且是可覆盖则会创建成功,否则报错,无返回。

2-10)tf.gfile.Rename(oldname, newname, overwrite=False)

重命名或移动一个文件或目录,无返回,其形参说明如下:

oldname:旧目录或旧文件;

newname:新目录或新文件;

overwrite:默认为false,如果新目录或新文件已经存在则会报错,否则重命名或移动成功。

2-11)tf.gfile.Stat(filename)

返回目录的统计数据,该函数会返回FileStatistics数据结构,以dir(tf.gfile.Stat(filename))获取返回数据的属性如下:

2-12)tf.gfile.Walk(top, in_order=True)

递归获取目录信息生成器,top是目录名,in_order默认为True指示顺序遍历目录,否则将无序遍历,每次生成返回如下格式信息(dirname, [subdirname, subdirname, ...], [filename, filename, ...])。

2-13)tf.gfile.GFile(filename, mode)

获取文本操作句柄,类似于python提供的文本操作open()函数,filename是要打开的文件名,mode是以何种方式去读写,将会返回一个文本操作句柄。

tf.gfile.Open()是该接口的同名,可任意使用其中一个!

2-14)tf.gfile.FastGFile(filename, mode)

该函数与tf.gfile.GFile的差别仅仅在于“无阻塞”,即该函数会无堵塞以较快的方式获取文本操作句柄

三、gfile示例

我将按照API介绍的顺序来举例说明每一个接口的使用方法!

假设在目录/home/xsr-ai/study/test里已经拥有如下文件:

示例代码如下:

import tensorflow as tf

tf.gfile.Copy('/home/xsr-ai/study/test/app.py', '/home/xsr-ai/study/test/app_new.py', True)

tf.gfile.MkDir('/home/xsr-ai/study/test/gfile')

tf.gfile.Remove('/home/xsr-ai/study/test/app.py')

tf.gfile.DeleteRecursively('/home/xsr-ai/study/test/hello')

pathexist = tf.gfile.Exists('/home/xsr-ai/study/test/')
print(pathexist)
print('\n') glob = tf.gfile.Glob('/home/xsr-ai/study/test/app*new.py')
print(glob)
print('\n') isdir = tf.gfile.IsDirectory('/home/xsr-ai/study/test/yes')
print(isdir)
print('\n') lstdir = tf.gfile.ListDirectory('/home/xsr-ai/study/test/mnist')
print(lstdir)
print('\n') tf.gfile.MakeDirs('/home/xsr-ai/study/test/lucky/boy/is/me') tf.gfile.Rename('/home/xsr-ai/study/test/hello.jpg', '/home/xsr-ai/study/test/world.jpg', True) statinfo = tf.gfile.Stat('/home/xsr-ai/study/test/')
print(statinfo.length)
print('\n') walkinfo = tf.gfile.Walk('/home/xsr-ai/study/test/')
for info in walkinfo:
print(info)
print('\n') gfile_hd = tf.gfile.GFile('/home/xsr-ai/study/test/app_new.py', "r")
print(gfile_hd.readline())
print('\n') fast_gfile_hd = tf.gfile.FastGFile('/home/xsr-ai/study/test/app_new.py', "r")
print(fast_gfile_hd.readline()) print('\ngfile example is end, good lucky!')

在jupyter notebook里执行该示例代码输出信息如下:

运行示例代码后目录/home/xsr-ai/study/test的情况如下:

通过该示例,可以看到gfile所有接口都有按照正确逻辑执行输出,Congratulation to me!

【转载】 tensorflow gfile文件操作详解的更多相关文章

  1. Android的file文件操作详解

    Android的file文件操作详解 android的文件操作要有权限: 判断SD卡是否插入 Environment.getExternalStorageState().equals( android ...

  2. 转载: GIt远程操作详解

    Git远程操作详解   作者: 阮一峰 日期: 2014年6月12日 Git是目前最流行的版本管理系统,学会Git几乎成了开发者的必备技能. Git有很多优势,其中之一就是远程操作非常简便.本文详细介 ...

  3. android中的文件操作详解以及内部存储和外部存储(转载)

    原文链接:http://m.blog.csdn.net/article/details?id=17725989 摘要 其实安卓文件的操作和java在pc环境下的操作并无二致,之所以需要单独讲解是因为安 ...

  4. 【转载】HBase基本数据操作详解【完整版,绝对精品】

    转载自: http://blog.csdn.net/u010967382/article/details/37878701 概述 对于建表,和RDBMS类似,HBase也有namespace的概念,可 ...

  5. Opencv YAML和XML格式文件操作详解

    本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/47660943 本文参考Opencv 2 ...

  6. Unix/Linux环境C编程入门教程(41) C语言库函数的文件操作详解

     上一篇博客我们讲解了如何使用Linux提供的文件操作函数,本文主要讲解使用C语言提供的文件操作的库函数. 1.函数介绍 fopen(打开文件) 相关函数 open,fclose 表头文件 #in ...

  7. Python——文件操作详解

    python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 返回指定目录下的所有文件和目 ...

  8. C语言文件操作详解

    C语言中没有输入输出语句,所有的输入输出功能都用 ANSI C提供的一组标准库函数来实现.文件操作标准库函数有: 文件的打开操作 fopen 打开一个文件 文件的关闭操作 fclose 关闭一个文件 ...

  9. 【转】 C语言文件操作详解

    转自:http://www.cnblogs.com/likebeta/archive/2012/06/16/2551780.html C语言中没有输入输出语句,所有的输入输出功能都用 ANSI C提供 ...

  10. 【转】 android中的文件操作详解以及内部存储和外部存储

    摘要 其实安卓文件的操作和Java在pc环境下的操作并无二致,之所以需要单独讲解是因为安卓系统提供了不同于pc的访问文件系统根路径的api,同时对一个应用的私有文件做了统一的管理.根据我的经验,初学者 ...

随机推荐

  1. kettle从入门到精通 第五十一课 ETL之kettle Avro input

    1.我们在学习nifi的过程中有接触到Avro schema,当时我在想kettle应该也支持Avro,果不其然kettle也是支持Avro文件的读和写的.今天我们一起来学习下kettle中如何使用A ...

  2. 大一统的监控探针采集器 cprobe

    需求背景 监控数据采集领域,比如 Prometheus 生态有非常多的 Exporter,虽然生态繁荣,但是无法达到开箱即用的大一统体验,Exporter 体系的核心问题有: 良莠不齐:有的 Expo ...

  3. 技嘉BIOS超频设置操作路径

    关闭超线程 频率电压控制 > 进阶处理器设置 > Hyper_THreading 关小核心 频率电压控制 > GIGABYTE PerfDrive > Ecore Disabl ...

  4. Jupyter QtConsole 配置,2023 年了你还在使用 QtConsole 吗?

    目录 Jupyter QtConsole 配置,2023 年了你还在使用 QtConsole 吗? Jupyter QtConsole 的安装 设置字体 启动时自动加载需要的库包 更新:2023 年 ...

  5. 从github下好dirsearch后出现要下载文件依赖错误

    pip3 install -r requirements.txt

  6. Linux开机启动三种方式

    有的时候,我们开机启动一些命令或者是一段脚本,又或者是开机启动自定义的服务. 下面归纳了2种实现的方式. 方式1-开机启动命令 vim /etc/rc.local #添加你想执行的命令 chmod + ...

  7. hbase第一课:hbase-2.2.7分布式搭建

    hbase-2.2.7分布式搭建文档 1.上传解压配置环境变量 # 1.解压 tar -xvf hbase-2.2.7-bin.tar.gz.gz # 2.配置环境变量 vim /etc/profil ...

  8. 如何在不能求逆的时候做子集卷积 exp(即便能求逆也比常见方法优雅)

    为什么要求逆?正常做子集卷积 exp 的时候递推求 \(G=\exp(F)\) 的系数时要用. 什么情况下不能求逆?模 \(2^{64}\),或者压根不取模. 我们可能会想,算出来肯定除得尽啊,因为组 ...

  9. WOE编码与IV值

    参考: WOE与IV值浅谈 机器学习-变量筛选之IV值和WOE 0. Introduction WOE (weight of evidence): 证据权重 IV (information value ...

  10. SpringBoot 启动时报错Unable to start embedded Tomcat

    导读 最近公司有个gradle构建的工程,需要改造成maven方式构建(点我直达).转为maven后,启动时一直报tomcat错误,最终排查是因为servlet-api这个包导致的依赖冲突,将这个依赖 ...