【转载】 tensorflow gfile文件操作详解

摘要:
因此,我们可以使用这些接口存储和加载检查点文件,将tensorboardlog信息写入文本,并访问训练数据(用于其他目的)。覆盖=False)复制源文件并创建目标文件。如果目标文件已经存在,则错误2-2)tf.gfile.MkDir(目录名)创建目录,2-3)tf.gfile。删除(文件名)删除文件。

 原文地址:

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)

【转载】 tensorflow gfile文件操作详解第1张

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

  • 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))获取返回数据的属性如下:

【转载】 tensorflow gfile文件操作详解第2张

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里已经拥有如下文件:

【转载】 tensorflow gfile文件操作详解第3张

示例代码如下:

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('
')

glob = tf.gfile.Glob('/home/xsr-ai/study/test/app*new.py')
print(glob)
print('
')

isdir = tf.gfile.IsDirectory('/home/xsr-ai/study/test/yes')
print(isdir)
print('
')

lstdir = tf.gfile.ListDirectory('/home/xsr-ai/study/test/mnist')
print(lstdir)
print('
')

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('
')
                         
walkinfo = tf.gfile.Walk('/home/xsr-ai/study/test/')
for info in walkinfo:
    print(info)
print('
')
                         
gfile_hd = tf.gfile.GFile('/home/xsr-ai/study/test/app_new.py', "r")
print(gfile_hd.readline())
print('
')
                         
fast_gfile_hd = tf.gfile.FastGFile('/home/xsr-ai/study/test/app_new.py', "r")
print(fast_gfile_hd.readline())
                         
print('
gfile example is end, good lucky!')

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

【转载】 tensorflow gfile文件操作详解第4张

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

【转载】 tensorflow gfile文件操作详解第5张

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

免责声明:文章转载自《【转载】 tensorflow gfile文件操作详解》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇php eval函数用法总结WireShark抓包分析(二)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

sqlite3 语法

https://www.sqlite.org/index.html  官网 http://tutlane.com/tutorial/sqlite/sqlite-case-statement     http://www.runoob.com/sqlite/sqlite-data-types.html http://www.w3school.com.cn/s...

python -- 环境搭建

 前言: Python是一种面向对象的解释型编程语言。它是开源的、免费的、跨平台的。Python对新手非常友好、功能强大、高效灵活,并且提供了大量的程序模块。被广泛应用于Web编程、爬虫编写、数据分析、机器学习和人工智能等领域。 一、在Windows下安装Python 打开Python官网 https://www.python.org,选择操作系统相应的版...

python简单实现appium移动端真机运行自动化测试(Android篇)

Eclipse和Python环境搭建完后,依次安装如下必备品 1、安装jdk,配置环境变量:    变量名:JAVA_HOME    变量值:C:Program FilesJavajdk1.7.0    变量名:CLASSPATH    变量值:.;%JAVA_HOME%libdt.jar;%JAVA_HOME%lib ools.jar; 2、安装pyth...

node rpc 使用

什么是rpc RPC(Remote Procedure Call)远程过程调用,简单的理解是一个节点请求另一个节点提供的服务 本地过程调用:如果需要将本地student对象的age+1,可以实现一个addAge()方法,将student对象传入,对年龄进行更新之后返回即可,本地方法调用的函数体通过函数指针来指定。 远程过程调用:上述操作的过程中,如果ad...

关于Docker目录挂载的总结(一)

Docker容器启动的时候,如果要挂载宿主机的一个目录,可以用-v参数指定。 譬如我要启动一个centos容器,宿主机的/test目录挂载到容器的/soft目录,可通过以下方式指定: # docker run -it -v /test:/soft centos /bin/bash 这样在容器启动后,容器内会自动创建/soft的目录。通过这种方式,我们可以明...

通过 redo日志恢复数据库

如果还原存档的重做日志文件和数据文件,则必须先执行介质恢复,然后才能打开数据库。归档重做日志文件中未反映在数据文件中的任何数据库事务都将应用于数据文件,从而在打开数据库之前将它们置于事务一致状态。 介质恢复需要控制文件,数据文件(通常从备份恢复)以及包含自备份数据文件以来的更改的联机和归档重做日志文件。介质恢复通常用于从介质故障中恢复,例如丢失文件或磁盘,...