#!usr/bin/env python
# -*- coding:utf-8 _*-
"""
@author: Caramel
@file: io.py
@time: 2020/05/30
@desc:
1.队列和线程
队列和队列管理器
线程和线程协调器
2.文件读取
"""
import tensorflow as tf
# #模拟一下同步先处理数据,然后才能取数据训练
# #1.首先定义队列
# Q = tf.FIFOQueue(3, tf.float32)
# # 放入数据
# en_q_many = Q.enqueue_many([[0.1, 0.2, 0.3]])
# # 2.定义一些处理数据的逻辑,取数据的过程 取数据, +1, 入队列
# out_q = Q.dequeue()
# data = out_q + 1
# en_q = Q.enqueue(data)
#
# with tf.Session() as sess:
# #初始化队列
# sess.run(en_q_many)
# #处理数据
# for i in range(100):
# sess.run(en_q)
#
# #训练数据
# for i in range(Q.size().eval()):
# print(sess.run(Q.dequeue()))
'''模拟异步子线程 存入样本 主线程 读取样本
1.定义一个队列,1000
2.定义子线程要做的事情 值 + 1 放入队列
3.定义队列管理器op,指定子线程要做什么事情,多少个子线程
'''
# Q = tf.FIFOQueue(1000, tf.float32)
#
# var = tf.Variable(0.0)
# #实线一个自增
# data = tf.assign_add(var, tf.constant(1.0))
# en_q = Q.enqueue(data)
#
# qr = tf.train.QueueRunner(Q, enqueue_ops=[en_q]*4)
# #初始化变量的op
# init_op = tf.global_variables_initializer()
# with tf.Session() as sess:
# sess.run(init_op)
#
# #开启线程管理器
# coord = tf.train.Coordinator()
# #真正开启子线程
# threads = qr.create_threads(sess, start=True, coord=coord)
#
# #主线程,不断读取训练数据
# for i in range(300):
# print(sess.run(Q.dequeue()))
#
# #回收线程
# coord.request_stop()
# coord.join(threads)
'''
文件读取:
1.构造文件队列
2.读取队列内容
csv文件:读取第一行
二进制文件:执行一个样本的bytes肚脐眼
图片文件:按一张张读取
3.读取队列内容decode
4.批处理:A中的所有样本
主线程要做:去样本数据训练
'''
import os
def csv_reader(csv_list):
'''
读取csv文件
:param csv_list: 文件路径+名字的列表
:return:读取的内容
'''
#1.构造文件队列
file_queue = tf.train.string_input_producer(csv_list)
#2.构造csv阅读器读取队列数据(按一行)
reader = tf.TextLineReader(skip_header_lines=1)
key, value = reader.read(file_queue)
#3.对每行内容进行解码
#record_defaults:指定每一个样本的每一列的类型,指定默认值
record = [[0], [0], ['None']]
date, hour, type_ = tf.decode_csv(value, record_defaults=record)
print(date, hour, type)
#4.读取多个数据:批处理
date_batch, hour_batch, type_batch = tf.train.batch([date, hour, type_], batch_size=9, num_threads=1, capacity=9)
return date_batch, hour_batch, type_batch
if __name__ == '__main__':
# 找到文件,放入列表 路径+名字放到列表中
filename = os.listdir('./')[0]
filelist = ['./china_cities_20151201.csv']
print(filelist)
print(filename)
date, hour, type_ = csv_reader(filelist)
with tf.Session() as sess:
# 定义一个线性协调器
coord = tf.train.Coordinator()
# 开启读取文件的线程
threads = tf.train.start_queue_runners(sess, coord=coord)
# 打印读取的内容
print(sess.run([date, hour, type_]))
# 回收线程
coord.request_stop()
coord.join(threads)