Python杂记

1、json.load&json.loads

json.load()是用来读取文件的,即,将文件打开然后就可以直接读取。示例如下:

with open("文件名") as f:
     result=json.load(f)

json.loads()是用来读取字符串的,即,可以把文件打开,用readline()读取一行,然后json.loads()一行。示例如下:

json文件为:

{"outputs": ["pool1/7x7/ets", "pool1/7x7/rf", "pool1/10x10/ets", "pool1/10x10/rf", "pool1/13x13/ets", "pool1/13x13/rf"]}

读取代码如下:

with open("文件名") as f:
    line=f.readline():
    result=json.loads(line)

2、os.path.join()函数

作用:连接两个或更多的路径名组件

1.如果各组件名首字母不包含’/’,则函数会自动加上

2.如果有一个组件是一个绝对路径,则在它之前的所有组件均会被舍弃

3.如果最后一个组件为空,则生成的路径以一个’/’分隔符结尾

Demo1

import os

Path1 = 'home'
Path2 = 'develop'
Path3 = 'code'

Path10 = Path1 + Path2 + Path3
Path20 = os.path.join(Path1,Path2,Path3)
print ('Path10 = ',Path10)
print ('Path20 = ',Path20)

输出

Path10 = homedevelopcode
Path20 = home\develop\code

3、os.listdir()方法

此方法返回一个列表,其中包含有指定路径下的目录和文件的名称

import os
dirct = '/home/workespace/notebook/'
for i in os.listdir(dirct):
    print(i)

redis
study_test.ipynb
mnist_dataset
.ipynb_checkpoints
yaml-tool
sweetwater
makeyourownneuralnetwork
Untitled.ipynb
AI-Practice-Tensorflow-Notes
working
cornfield

4、os.path.isdir()

用于判断某一对象(需提供绝对路径)是否为目录

import os
dirct = '/home/workespace/notebook/'
for i in os.listdir(dirct):
    fulldirct = os.path.join(dirct, i)
    if os.path.isdir(fulldirct): #入参需要是绝对路径
        print(i)
redis
mnist_dataset
.ipynb_checkpoints
yaml-tool
sweetwater
makeyourownneuralnetwork
AI-Practice-Tensorflow-Notes
working
cornfield

5、os.path.isfile()

用于判断某一对象(需提供绝对路径)是否为文件

import os
dirct = '/home/workespace/notebook/'
for i in os.listdir(dirct):
    fulldirct = os.path.join(dirct, i)
    if os.path.isfile(fulldirct): #入参需要是绝对路径
        print(i)

study_test.ipynb
Untitled.ipynb

6、os.unlink()

os.unlink() 方法用于删除文件,如果文件是一个目录则返回一个错误。

语法
unlink()方法语法格式如下:

os.unlink(path)
参数
path – 删除的文件路径

返回值
该方法没有返回值。

实例
以下实例演示了 unlink() 方法的使用:

#!/usr/bin/python

import os, sys

#列出目录
print "目录为: %s" %os.listdir(os.getcwd())

os.unlink("aa.txt")

#删除后的目录
print "删除后的目录为 : %s" %os.listdir(os.getcwd())

执行以上程序输出结果为:

目录为:

 [ 'a1.txt','aa.txt','resume.doc']

删除后的目录为 :

[ 'a1.txt','resume.doc' ]

7、UUID

UUID: 通用唯一标识符 ( Universally Unique Identifier )
保证在空间和时间上唯一性. 它是通过MAC地址, 时间戳, 命名空间, 随机数, 伪随机数来保证生成ID的唯一性, 固定大小( 128 bit ).

  • uuid.uuid1([node[, clock_seq]]) : 基于时间戳
      使用主机ID, 序列号, 和当前时间来生成UUID, 可保证全球范围的唯一性. 但由于使用该方法生成的UUID中包含有主机的网络地址, 因此可能危及隐私. 该函数有两个参数, 如果 node 参数未指定, 系统将会自动调用 getnode() 函数来获取主机的硬件地址. 如果 clock_seq 参数未指定系统会使用一个随机产生的14位序列号来代替.

  • uuid.uuid3(namespace, name) : 基于名字的MD5散列值
       通过计算命名空间和名字的MD5散列值来生成UUID, 可以保证同一命名空间中不同名字的唯一性和不同命名空间的唯一性, 但同一命名空间的同一名字生成的UUID相同.

  • uuid.uuid4() : 基于随机数
       通过随机数来生成UUID. 使用的是伪随机数有一定的重复概率.

  • uuid.uuid5(namespace, name) : 基于名字的SHA-1散列值
       通过计算命名空间和名字的SHA-1散列值来生成UUID, 算法与 uuid.uuid3() 相同.

使用方面:
首先,Python中没有基于DCE的,所以uuid2可以忽略;
其次,uuid4存在概率性重复,由无映射性,最好不用;
再次,若在Global的分布式计算环境下,最好用uuid1;
最后,若有名字的唯一性要求,最好用uuid3或uuid5。

8、Lock()与RLock()

在threading模块中,定义两种类型的琐:threading.Lock和threading.RLock。它们之间有一点细微的区别,通过比较下面两段代码来说明:

import threading  

lock = threading.Lock() #Lock对象  

lock.acquire()  

lock.acquire()  #产生了死琐。  

lock.release()  

lock.release()  
import threading  

rLock = threading.RLock()  #RLock对象  

rLock.acquire()  

rLock.acquire() #在同一线程内,程序不会堵塞。  

rLock.release()  

rLock.release()  

这两种琐的主要区别是:RLock允许在同一线程中被多次acquire。而Lock却不允许这种情况。注意:如果使用RLock,那么acquire和release必须成对出现,即调用了n次acquire,必须调用n次的release才能真正释放所占用的琐。

锁的好处:

确保了某段关键代码只能由⼀个线程从头到尾完整地执⾏

锁的坏处:

阻⽌了多线程并发执⾏,包含锁的某段代码实际上只能以单线程模式执⾏,效率就⼤⼤地下降了。由于可以存在多个锁,不同的线程持有不同的锁,并试图获取对⽅持有的锁时,可能会造成死锁。

9、range与xrange

range:

x = range(0, 5)
print(type(x))  # 打印x的类型,结果是list
print(x) # 结果是[0,1,2,3,4]

xrange:

x = xrange(0, 5)
print(type(x))  # 输出类型,结果为一个生成对象
print(x)  # 输出x, 结果为xrange(0,5)

所以相对来说,xrange比range性能优化很多,因为他不需要一下子开辟一块很大的内存,特别是数据量比较大的时候。

注意:
1、xrange和range这两个基本是使用在循环的时候。
2、当需要输出一个列表的时候,就必须要使用range了

10、三目运算符

程序开发中有大量的if else 语句,其中又有很大一部分类似:x = c if a else b ,这样的逻辑,常规语句书写:

#当 a = True , x =c 
#当 a = False , x = b
if a :
	x = c
else:
	x = b

略显复杂,因此主流程序语言都有一种“三目运算符”的语法,同样python也有,上述代码就可以修改为:

x = c if a else b

11、append和extend的区别

list.append(object) 向列表中添加一个对象object
list.extend(sequence) 把一个序列seq的内容添加到列表中

music_media = ['compact disc', '8-track tape', 'long playing record']
new_media = ['DVD Audio disc', 'Super Audio CD']
music_media.append(new_media)
print music_media
>>>['compact disc', '8-track tape', 'long playing record', ['DVD Audio disc', 'Super Audio CD']]

使用append的时候,是将new_media看作一个对象,整体打包添加到music_media对象中。

music_media = ['compact disc', '8-track tape', 'long playing record']
new_media = ['DVD Audio disc', 'Super Audio CD']
music_media.extend(new_media)
print music_media
>>>['compact disc', '8-track tape', 'long playing record', 'DVD Audio disc', 'Super Audio CD']

使用extend的时候,是将new_media看作一个序列,将这个序列和music_media序列合并,并放在其后面。

12、Queue

python中的队列分类

  • 1.线程Queue,也就是普通的Queue

  • 2.进程Queue,在多线程与多进程会介绍。

Queue的种类

  • FIFO:
    Queue.Queue(maxsize=0)

    FIFO即First in First Out,先进先出。Queue提供了一个基本的FIFO容器,使用方法很简单,maxsize是个整数,指明了队列中能存放的数据个数的上限。一旦达到上限,插入会导致阻塞,直到队列中的数据被消费掉。如果maxsize小于或者等于0,队列大小没有限制。

  • LIFO
    Queue.LifoQueue(maxsize=0)

    LIFO即Last in First Out,后进先出。与栈的类似,使用也很简单,maxsize用法同上

  • priority
    class Queue.PriorityQueue(maxsize=0)

    构造一个优先队列。maxsize用法同上。

基本方法:

  Queue.Queue(maxsize=0)   FIFO, 如果maxsize小于1就表示队列长度无限
   Queue.LifoQueue(maxsize=0)   LIFO, 如果maxsize小于1就表示队列长度无限
   Queue.qsize()   返回队列的大小 
   Queue.empty()   如果队列为空,返回True,反之False 
   Queue.full()   如果队列满了,返回True,反之False
   Queue.get([block[, timeout]])   读队列,timeout等待时间 
   Queue.put(item, [block[, timeout]])   写队列,timeout等待时间 
   Queue.queue.clear()   清空队列

13、rstrip()

Python rstrip() 删除 string 字符串末尾的指定字符(默认为空格)

你可能感兴趣的:(Python)