Python Coding Tricks

1. Python 二维数组 数据类型转换

>>> a = [['1','2','5','6','8'],['4', '5', '8', '5', '8']]
>>> map(map, [float, float], a)
15: [[1.0, 2.0, 5.0, 6.0, 8.0], [4.0, 5.0, 8.0, 5.0, 8.0]]
>>> map(map, [int, int], a)
16: [[1, 2, 5, 6, 8], [4, 5, 8, 5, 8]]

2. Python多线程并行执行

利用map和multiprocessing包

from multiprocessing.dummy import Pool as ThreadPool

pool = ThreadPool(4) # Sets the pool size to 4 默认为电脑cpu核数
float_list = [1.0, 2.0, 3.0, 4.0]
int_list = pool.map(int, float_list)
pool.close()
pool.join()

3. 带命令行参数

if __name__ == '__main__':
    PARSER = argparse.ArgumentParser(description="Parameters for the script.")

    PARSER.add_argument('-d', "--diagnostics", action="store_true",
                        help="Compute diagnostics.")
    PARSER.add_argument('-i', "--iter", type=int, default=1,
                        help="Number of iterations for averaging.")
    PARSER.add_argument("-f", "--outputfile", default="",
    PARSER.add_argument('-v', "--verbose", action="store_true",
                        help="Show computation steps.")

    PARSER.set_defaults(argument_default=False)
    CONFIG = PARSER.parse_args()
    CONFIG.stack = CONFIG.stack or CONFIG.fwls
    you_own_func(CONFIG)

4. 二进制文件读写

使用struct包

import struct
import numpy as np
path = 'db_pca_512.bin'

with open(path, 'rb') as f:
    db_num = np.uint32(struct.unpack('I', f.read(4)) )[0]
    db_fea_size = np.uint32(struct.unpack('I', f.read(4)))[0]

    A = np.zeros((db_num, db_fea_size), 'float32')
    for i in xrange(db_num):
        print i
        for j in xrange(db_fea_size):
            A[i, j] = np.float32(struct.unpack('I', f.read(4)))[0]

struct.unpack()解码成python变量

a,b,c,d=struct.unpack('5s6sif',bytes)

‘5s6sif’这个叫做fmt,就是格式化字符串,由数字加字符构成,5s表示占5个字符的字符串,2i,表示2个整数等等,下面是可用的字符及类型,ctype表示可以与python中的类型一一对应。

FormatC TypePython字节数
xpad byteno value1
ccharstring of length 11
bsigned charinteger1
Bunsigned charinteger1
?_Boolbool1
hshortinteger2
Hunsigned shortinteger2
iintinteger4
Iunsigned intinteger or long4
llonginteger4
Lunsigned longlong4
qlong longlong8
Qunsigned longlong long8
ffloatfloat4
ddoublefloat8
schar[]string1
pchar[]string1
Pvoid *long

5. range() 和 xrange()

range([start,] stop[, step]),根据start与stop指定的范围以及step设定的步长,生成一个序list,xrange 用法与 range 完全相同,所不同的是生成的不是一个list对象,而是一个生成器。要生成很大的数字序列的时候,用xrange会比range性能优很多,因为不需要一上来就开辟一块很大的内存空间。
xrange 和 range 这两个基本上都是在循环的时候用:

for i in range(0, 100):
    print i

for i in xrange(0, 100):
    print i

6. 使用PIL获取文件夹下所有图片,并使用tensorflow中的TFRecords序列化

TFRecords文件包含了tf.train.Example 协议内存块(protocol buffer)(协议内存块包含了字段 Features)。我们可以写一段代码获取你的数据, 将数据填入到Example协议内存块(protocol buffer),将协议内存块序列化为一个字符串, 并且通过tf.python_io.TFRecordWriter 写入到TFRecords文件。

从TFRecords文件中读取数据, 可以使用tf.TFRecordReader的tf.parse_single_example解析器。这个操作可以将Example协议内存块(protocol buffer)解析为张量。

import os
import tensorflow as tf 
from PIL import Image

cwd = os.getcwd()

'''
此处加载的数据目录如下:
-- img1.jpg
     img2.jpg
     img3.jpg
     ...
-- img1.jpg
     img2.jpg
     ...
-- ...
...
'''
writer = tf.python_io.TFRecordWriter("train.tfrecords")
for index, name in enumerate(classes):
    class_path = cwd + name + "/"
    for img_name in os.listdir(class_path):
        img_path = class_path + img_name
            img = Image.open(img_path)
            img = img.resize((224, 224))
        img_raw = img.tobytes()              #将图片转化为原生bytes
        example = tf.train.Example(features=tf.train.Features(feature={
            "label": tf.train.Feature(int64_list=tf.train.Int64List(value=[index])),
            'img_raw': tf.train.Feature(bytes_list=tf.train.BytesList(value=[img_raw]))
        }))
        writer.write(example.SerializeToString())  #序列化为字符串
writer.close()
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值