python學習筆記

Author: maddock

Date: 2015-03-15 21:42:01

(暫時沒有整理)

 python json文件處理html

#coding:utf-8
import json

# data = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]

# # 打開鍵值排序、縮進爲 四、以',', ': '爲分隔
# json = json.dumps(data, sort_keys=True, indent=4, separators=(',', ': '))
# print(json)


# jsonData = '{"a":1,"b":2,"c":3,"d":4,"e":5}';

# text = json.loads(jsonData)
# print(text)

# with open("model-symbol1.json", "w", encoding='utf-8') as f:
#     # indent 超級好用,格式化保存字典,默認爲None,小於0爲零個空格
#     f.write(json.dumps(a, indent=4))
#     # json.dump(a,f,indent=4)   # 和上面的效果同樣


#格式化打印json文件
# with open("model-symbol.json", "r", encoding='utf-8') as f:
with open("model-symbol.json", "r") as f:
    aa = json.loads(f.read())
    print(json.dumps(aa, indent=4))

 

python 不以科學計數法輸出

其實很簡單隻需兩個語句:python

import numpy as np
np.set_printoptions(suppress=True)
這樣就能夠搞定

python交換矩陣的兩行linux

A = np.mat('1 2;3 4')
print(A)
#A[0,:],A[1,:] = A[1,:],A[0,:]
A[[0,1]] = A[[1,0]]
#上面至關於 A[[0,1],:] = A[[1,0],:]
print(A)shell

 

python numpy 矩陣拼接json

img爲一個矩陣160*160windows

data_list爲一個list 兩個元素爲矩陣數組

data_list[0][0, ...] = img bash

 

python dict按照key 排序:

一、method 1.數據結構

items  =  dict .items()
items.sort()
for  key,value  in  items:
    print  key, value  # print key,dict[key]

二、method 2.app

print  key,  dict [key]  for  key  in  sorted ( dict .keys())

 

python dict按照value排序:

method 1:

把dictionary中的元素分離出來放到一個list中,對list排序,從而間接實現對dictionary的排序。這個「元素」能夠是key,value或者item。

method2:

#用lambda表達式來排序,更靈活:
sorted ( dict .items(),  lambda  x, y:  cmp (x[ 1 ], y[ 1 ]))
#降序
sorted ( dict .items(),  lambda  x, y:  cmp (x[ 1 ], y[ 1 ]), reverse = True )

下面給出python內置sorted函數的幫助文檔:

sorted(...)
sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list

 

python 調試

python -m pdb err.py

pdb.set_trace()

這個方法也是用pdb,可是不須要單步執行,咱們只須要import pdb,而後,在可能出錯的地方放一個pdb.set_trace(),就能夠設置一個斷點:

# err.py import pdb s = '0' n = int(s) pdb.set_trace() # 運行到這裏會自動暫停 print 10 / n

python for循環巧妙運用(迭代、列表生成式)

python筆記2-數據類型:列表[List]經常使用操做

序列是Python中最基本的數據結構。序列中的每一個元素都分配一個數字 - 它的位置,或索引,索引從0開始,依此類推。

序列均可以進行的操做:包括 索引,切片,加,乘,檢查成員

列表是最經常使用的Python數據類型,list 是一種有序的集合列表是可變變量,即能經過列表的下標進行修改值

建立一個列表,只要把逗號分隔的不一樣的數據項使用方括號括起來便可。以下所示:

nums = [1, 2, 3, 'beijing', 'shanghai']  #定義列表
num1 = [1, 2, 3, 4, 5, 6]  #List內元素爲int類型
num2 = ['a',' b', 'c', 'd'] #List內元素爲str類型

List數據類型的以下:

增長元素:

nums = [1, 2, 3, 'beijing', 'shanghai']  #定義列表
nums.append('byz') #添加的值從最末尾添加,執行結果:[1, 2, 3,'beijing', 'shanghai','byz']
nums.insert(2, '888') #在指定位置添加元素,2表明下標,執行結果:[1, 2, '888', 3, 'beijing', 'shanghai', 'byz']

刪除元素:

複製代碼
nums = [1, 2, 3, 'beijing', 'shanghai'] 
# pop(num) 方法的返回值就是刪除的指定位置的元素值
nums.pop() #默認刪除最後一個元素,執行結果:[1, 2, 3, 'beijing']
nums.pop(2) #刪除指定位置的元素,執行結果:[1, 2, 'beijing']
nums.clear()  #清空列表,執行結果:[]
del nums[0]   #使用del關鍵字,刪除指定位置的元素,0表明下標,執行結果:[ 2, 'beijing']
nums.remove('beijing')  #remove()刪除方法,傳入的參數是 元素值,pop()刪除指定位置元素,傳入的參數是下標
複製代碼

修改元素:

nums = [1, 2, 3, 'beijing', 'shanghai']  #定義列表
#修改,經過下標來修改list元素值
nums[0] = 'hello'  #修改List內的元素值,執行結果:['hello', 2, 3, 'beijing', 'shanghai']
nums[5] = 'haha' #修改不存在的下標,報錯信息:IndexError: list assignment index out of range

查詢元素:

nums = [1, 2, 3, 'beijing', 'shanghai']  #定義列表
#查詢,經過下標和for循環來遍歷取值
print(nums[3])   #經過下標取值,下標從0開始,執行結果:beijing
for num in nums:
    print(num)  #經過for循環,遍歷list內的元素

 List中的count(元素)方法,能夠用來判斷元素是否存在List內,用法以下:

複製代碼
#判斷元素是否存在List內,可使用in方法,也可使用count()方法
names = [1, 2, 3, 'beijing', 'beijing', 'shanghai']
print(names.count('beijing'))  #查找元素在list裏面的次數,執行結果爲:2
print(names.count('hahah')) #若查找的元素不在list裏面,返回結果爲0
num = names.count('beijing')
if num >0:
    print('說明元素存在')
else:
    print('元素不存在')
複製代碼

 獲取List元素的下標,用法以下:

names = [1, 2, 3, 'beijing', 'beijing', 'shanghai']
print(names.index('beijing'))   #獲取beijing這個元素的下標值,若是有多個元素時,返回第一個元素的下標值
print(names.index('a')) #若是查找的元素不存,則報錯:ValueError: 'a' is not in list
print(names.index('beijing', 2))    #能夠指定從哪一個元素開始查找,2表明開始查找的下標
print(names.index('beijing', 2, 3)) #能夠指定查找範圍,2,3表明開始、結束的下標值,查找範圍不包含結束下標對應的元素,顧頭不顧尾

List的extend方法,更改列表的值,用法以下:

複製代碼
names = [1, 2, 3, 'beijing', 'beijing', 'shanghai']
status = ['ywq', 'lhl', 'yqq']
print('列表合併的結果:', status + names)  #兩個列表List合併,產生一個新的變量,執行結果:['ywq', 'lhl', 'yqq', 1, 2, 3, 'beijing', 'beijing', 'shanghai']
print('這個是extend:', status.extend(names))  #extens沒有返回值,執行結果爲:None
print('extens後的status:', status)   #將names列表的 添加 到status裏,status的值進行了更改
複製代碼

list的extend 與 appen方法的區別:

nums = [23, 34, 21, 2, 33, 456, 12]
status = ['a','b','c']
print(status.extend(nums))
print(status)  #extends是將nums的添加到 status,執行結果爲一維數組:['a', 'b', 'c', 23, 34, 21, 2, 33, 456, 12]
nums = [23, 34, 21, 2, 33, 456, 12]
status = ['a','b','c']
print(status.append(nums)) 
print(status)  #append 是nums列表做爲一個元素 添加到status列表的最後面,執行結果爲二維數組:['a', 'b', 'c', [23, 34, 21, 2, 33, 456, 12]]

排序sort方法,用法以下:

複製代碼
nums = [23, 34, 21, 2, 33, 456, 12]
print('nums排序前:', nums)          #執行結果:[23, 34, 21, 2, 33, 456, 12]
nums.sort()              #默認是升序排列
print('sort 排序後的nums:', nums)    #執行結果:[2, 12, 21, 23, 33, 34, 456]
nums.sort(reverse=True)  #指定reverse=True,排序爲降序排列
print('降序排列的nums:', nums)       #執行結果:[456, 34, 33, 23, 21, 12, 2]
複製代碼

反轉數組,以下:

nums = [23, 34, 21, 2, 33, 456, 12]
print(nums.reverse()) #反轉的是nums的值,nums.reverse()沒有返回值,執行結果爲None
print(nums)  #反轉後的nums,執行結果:[12, 456, 33, 2, 21, 34, 23]

多維數組,獲取元素的值:

num = [1, 2, 9.8, ['a', 'b', ['hehe', 'haha']]]
print(num[3][0])  #獲取二維數組 a這個元素值
print(num[3][2][0])  #獲取三維數組,hehe這個元素值

切片操做

切片也就是另外一種方式獲取列表的值,它能夠獲取多個元素,能夠理解爲,從第幾個元素開始,到第幾個元素結束,獲取他們之間的值,格式是name:[1:10],好比說要獲取name的第一個元素到第五個元素,就能夠用name[0:6],切片是不包含後面那個元素的值的,記住顧頭不顧尾

複製代碼
names = ['zcl','py','byz']
print(names[0:2])   #切片的意思就是從list或者字符串裏面,取幾個元素,執行結果['zcl', 'py']
print(names[:2])    #默認從0開始取值,開始下標0能夠不用寫,執行結果:['zcl', 'py']
print(names[1:])    #從第1個下標開始取值,取後面全部的值,那麼結束下標值能夠不寫
print(names[:])     #不寫開始、結束的下標時,默認取整個列表的值
print(names[-1:])   #取最後一個值,下標從-1開始
複製代碼

切片的步長:

nums = list(range(1,21))
print(nums[0:11])  #執行結果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
print(nums[0:11:2])  #每隔2個字符取一個值,2是步長,執行結果:[1, 3, 5, 7, 9, 11]
print(nums[::-1])  #切片步長爲負數時,從後往前取值,取整個列表的值,執行結果:[20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

若是有寫的不對的,歡迎指出~~

print的用法

print('  %d %1.4f  ' % (j,Distance_matrix[i][j]))

 

分詞空格,讀取每一行

    with open("image_files.txt","r") as face_file:
        for line in face_file.readlines():
            path = line.strip().split("\n")
            image_files.append(path[0])
            #print(line)

 

將txt的數據讀取到一個矩陣中

'''
數據文件:2.txt內容:(以空格分開每一個數據)
1 2 2.5
3 4 4
7 8 7
'''

from numpy import *
A = zeros((3,3),dtype=float)    #先建立一個 3x3的全零方陣A,而且數據的類型設置爲float浮點型

f = open('2.txt')               #打開數據文件文件
lines = f.readlines()           #把所有數據文件讀到一個列表lines中
A_row = 0                       #表示矩陣的行,從0行開始
for line in lines:              #把lines中的數據逐行讀取出來
    list = line.strip('\n').split(' ')      #處理逐行數據:strip表示把頭尾的'\n'去掉,split表示以空格來分割行數據,而後把處理後的行數據返回到list列表中
    A[A_row:] = list[0:3]                    #把處理後的數據放到方陣A中。list[0:3]表示列表的0,1,2列數據放到矩陣A中的A_row行
    A_row+=1                                #而後方陣A的下一行接着讀
    #print(line)

print(A)    #打印 方陣A裏的數據

打印結果:
[[ 1.   2.   2.5]
 [ 3.   4.   4. ]
 [ 7.   8.   7. ]]

 將一個np矩陣寫入到一個txt文件,用空格分開

Distance_matrix = np.array([[1.0000, 0.4001, 0.9652, 0.4112, 0.2134, 0.1759],
[0.4001, 1.0000, 0.3673, 0.9457, 0.2191, 0.2402],
[0.9652, 0.3673, 1.0000, 0.3582, 0.2022, 0.2267],
[0.4112, 0.9457, 0.3582, 1.0000, 0.4616, 0.4515],
[0.2134, 0.2191, 0.2022, 0.4616, 1.0000, 0.9628],
[0.1759, 0.2402, 0.2267, 0.4515, 0.9628, 1.0000]])
print(Distance_matrix)

# Print distance matrix
with open("Distance_matrix.txt","w") as f:
    for i in range(nrof_images):
        for j in range(nrof_images):
            dist = Distance_matrix[i][j]
            f.write('%1.4f ' % dist)
        f.write('\n')

 

 

python2的print替換爲python3的print( )

print (.*?);?$
print\( $1\)

python print 顏色顯示

顯示顏色格式:\033[顯示方式;字體色;背景色m......[\033[0m]

複製代碼
-------------------------------------------
-------------------------------------------
字體色     |       背景色     |      顏色描述
-------------------------------------------
30        |        40       |       黑色
31        |        41       |       紅色
32        |        42       |       綠色
33        |        43       |       黃色
34        |        44       |       藍色
35        |        45       |       紫紅色
36        |        46       |       青藍色
37        |        47       |       白色
-------------------------------------------
-------------------------------
顯示方式 | 效果 ------------------------------- 0 | 終端默認設置 1 | 高亮顯示 4 | 使用下劃線 5 | 閃爍 7 | 反白顯示 8 | 不可見
-------------------------------
複製代碼

例:

print('This is a \033[1;35m test \033[0m!')
print('This is a \033[1;32;43m test \033[0m!')
print('\033[1;33;44mThis is a test !\033[0m')

Python 五個知識點搞定做用域

python split分詞函數以及字符串的strip().split("/")函數

獲取路徑的文件名,去掉後綴名
>>> import os
>>> os.path.splitext(os.path.split("/data/ert/123.jpg")[1])[0]
'123'

>>> os.path.split("/data/ert/123.jpg")
('/data/ert', '123.jpg')
>>>

>>> facepath = "/data/ert/123.jpg"
>>> faceID = facepath.strip().split("/")
>>> faceID = faceID[-1]
>>> print faceID
123.jpg
>>>

numpy增長一個維度

    #numpy增長一個維度
    a = np.array([1, 2, 3])  
    b = np.array([2, 3, 4])  
    c = np.vstack((a,b))
    d = a[np.newaxis, :]
    print(d)
    print(a.shape)
    print(d.shape)
    print(c[0])
    print(c.sum(axis=0))

 

 

遍歷圖像文件夾,找出全部的子目錄

def findAllfile(path, allfile):
    filelist =  os.listdir(path)  
    for filename in filelist:  
        filepath = os.path.join(path, filename)  
        if os.path.isdir(filepath):
            #print(filepath)  
            findAllfile(filepath, allfile)  
        else:  
            allfile.append(filepath)  
    return allfile  

 

#遍歷圖像文件夾
clusterpath  = "/DATA
filelist =  os.listdir(clusterpath) 
error_floder = []  
for filename in filelist:  
    filepath = os.path.join(clusterpath, filename)  
    if os.path.isdir(filepath):
        print(filepath)
    image_files = findAllfile(filepath,[])

 

 

找出一個list中出現次數最多的id和標籤

#coding:utf-8
from collections import Counter

def getmaxNum(srclist):
    counter = Counter(srclist)
    most_common_elem = counter.most_common(1)
    temp = most_common_elem[0]  
    most_common_id = temp[0]
    most_common_counter = temp[1]
    return most_common_id, most_common_counter


if __name__ == '__main__':
    a = [4, 4, 1, 1, 1, 1, 2,2,2,2,2,2,2, 3]
    most_common_id, most_common_counter = getmaxNum(a)
    print(most_common_id)
    print(most_common_counter)

 

nonzero的用法,返回非零元素的索引下表

>>> a = np.array([[0,0,3],[0,0,0],[0,0,9]])
>>> b = np.nonzero(a)
>>> print(b)
(array([0, 2]), array([2, 2]))
>>> a = np.array([[0,0,3],[0,0,0],[0,5,9]])
>>> b = np.nonzero(a)
>>> print(b)
(array([0, 2, 2]), array([2, 1, 2]))
>>> a = np.array([[0,0,3],[4,0,0],[0,5,9]])
>>> b = np.nonzero(a)
>>> print(b)
(array([0, 1, 2, 2]), array([2, 0, 1, 2]))
>>>

 

 python中循環遍歷目錄中全部文件

 

 

def findAllfile(path, allfile):
    filelist =  os.listdir(path)  
    for filename in filelist:  
        filepath = os.path.join(path, filename)  
        if os.path.isdir(filepath):
            #print(filepath)  
            findAllfile(filepath, allfile)  
        else:  
            allfile.append(filepath)  
    return allfile  

 

 

 

 

#coding=utf-8
import os
import cv2

def dirlist(path, allfile):  
    filelist =  os.listdir(path)  
  
    for filename in filelist:  
        filepath = os.path.join(path, filename)  
        if os.path.isdir(filepath):  
            dirlist(filepath, allfile)  
        else:  
            allfile.append(filepath)  
    return allfile  
 
jpgpath = "../lfw_160_dlib_aligned/"  
file = dirlist(jpgpath, []) 
for srcpath in file:
    print srcpath
    savepath = srcpath.replace("jpg", "png")
    print savepath
    img = cv2.imread(srcpath)
    cv2.imwrite(savepath, img)
    os.system("rm " +  srcpath )
    num += 1

 

python代碼中執行shell命令
    cppath = "./src/" + args.model_def.replace(".", "/") + ".py"
    os.system("cp " +  cppath +  " " + log_dir)

查看某個目錄是否存在,不存在就新建目錄

 
if not os.path.isdir(log_dir):  # Create the log directory if it doesn't exist
    os.makedirs(log_dir)

 

目錄存在刪除目錄
if
os.path.exists(face_clustr_result_center): os.system("rm -rf " + face_clustr_result_center) if not os.path.isdir(face_clustr_result_center): # Create the log directory if it doesn't exist os.makedirs(face_clustr_result_center)

 

 

spyder安裝

python2

sudo pip install spyder sudo apt-get install python-pyqt*

python3

sudo pip3 install spyder sudo apt-get install python3-pyqt*

文件處理  獲取文件夾中的全部文件,寫入文件

for picFile in os.listdir("/data/"): print(picFile)
#coding:utf-8
#https://www.cnblogs.com/wktwj/p/7257526.html

import os
import tensorflow as tf
from PIL import Image

root_dir = os.getcwd()

def getTrianList():
    with open("train_class.txt","w") as f:
        for file in os.listdir(root_dir+'/data'):
            for picFile in os.listdir(root_dir+"/data/"+file):
                print(picFile)
                f.write("data/"+file+"/"+picFile+" "+file+"\n")

if __name__=="__main__":
    getTrianList()

打開文件讀取每一行,並分詞

with open("faceimg/face_template .txt","r") as face_file:
                for line in face_file.readlines():
                    path, label = line.strip().split()

Numpy創建空矩陣

exist_face_vec = np.zeros([0, face_vec_size])

Numpy垂直方向拼接矩陣

exist_face_vec = np.vstack((exist_face_vec, face_detect_vec_one))

給深度學習入門者的Python快速教程 - numpy和Matplotlib篇

Numpy使用 list轉換爲narray

Numpy拼接兩個array

#coding:utf-8
import numpy as np
nrof_samples = 2
img_list = [None] * nrof_samples
img_list[0] = [1,2,3]
img_list[1] = [3,4,5]
images = np.stack(img_list)
print images.shape
print images
x = np.array([8,9,10])
images_new = np.vstack((images,x))
print images_new

# x=np.array([[9,8,7],[6,5,4]])
# print x

# y = np.array([2,3])
# print y.shape


l0 = np.arange(6).reshape((2, 3))
l1 = np.arange(6, 12).reshape((2, 3))

'''
vstack是指沿着縱軸拼接兩個array,vertical
hstack是指沿着橫軸拼接兩個array,horizontal
更廣義的拼接用concatenate實現,horizontal後的兩句依次等效於vstack和hstack
stack不是拼接而是在輸入array的基礎上增長一個新的維度
'''
print l0
print l1
m = np.vstack((l0, l1))
print m
p = np.hstack((l0, l1))
print p
q = np.concatenate((l0, l1))
r = np.concatenate((l0, l1), axis=-1)
s = np.stack((l0, l1))
print s

 
 python計時函數的使用

http://www.jb51.net/article/114797.htm

import time
time1 = time.time()
time.sleep(15)
time2 = time.time()
print time2 - time1

#python 各類for循環 for elem in list_array

for iterating_var in sequence:
   statements(s)

(1) 列表for循環
actual_issame_bool = [False, True, True]
actual_issame = []
for i in actual_issame_bool:
    if i == True:
        actual_issame.append(1)
    else:
        actual_issame.append(0)

(2) 文件行for循環讀取
csv_file = 'interest.bak'
with open(csv_file, "r") as f:
    for line in f.readline():
        print line

(3) 利用range產生等差數列0:99
total_images = 100
range(total_images)
for i in range(total_images):
    print i

python 文件操做

   print 輸出到文件

 f = open("data/face_train_num.txt", 'w')
    print>> f, '\t  people\tpicture'
    print >> f, 'total:\t%6d\t%7d' % (total_people, total_picture)
    print >> f, 'test:\t%6d\t%7d' % (len(test_people), len(test_set))
    print >> f, 'valid:\t%6d\t%7d' % (label, len(valid_set))
    print >> f, 'train:\t%6d\t%7d' % (label, len(train_set))

#python3 pring輸出到文件
# year = 1
# years = 5
# bj = 10000
# rate = 0.05
# f = open("interest.bak", 'w+')
# while year < years:
#     bj = bj * (1 + rate)
#     print("第{0}年,本金息總計{1}".format(year, bj), file=f)
#     year += 1


#numpy中的數據類型轉換,不能直接改原數據的dtype! 只能用函數astype()

#coding=utf-8
import os
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy
from PIL import Image

#numpy中的數據類型轉換,不能直接改原數據的dtype! 只能用函數astype()

b = np.array([1., 2., 3., 4.])
print(b.dtype)
print(b.shape)
c = b.astype(int)
print(c.shape)

b.dtype = 'int'
print(b.shape)
print(b.dtype)

float64
(4,)
(4,)
(8,)
int32

 Python 基礎教程

PyCharm設置改變字體大小的快捷鍵

使用notepad 替換python2中的print 括號

print (.*?);?$
print\( $1\)

 

python安裝各類第三方庫

Unofficial Windows Binaries for Python Extension Packages

http://www.lfd.uci.edu/~gohlke/pythonlibs/#scipy

 

(1) 畫圖操做

【數字的可視化:python畫圖之散點圖sactter函數詳解】

(2) 經常使用命令

python -m pip list 列出安裝的包

(3) Numpy

NumPy的詳細教程

windows下Python機器學習依賴庫安裝——numpy、scipy、sklearn、xgboost、theano等

window 上部署sklearn(python+pip+numpy+scipy+matplotlib+sklearn)

 

經常使用機器學習依賴包:

numpy  :點擊打開連接
scipy     :點擊打開連接
pandas  :  點擊打開連接
sklearn :點擊打開連接
xgboost  : 點擊打開連接

 重複前一條命令

  若是想要在IDLE 的主窗口中重複前一條命令,可使用Alt-P 組合鍵回滾,找到命令行的歷史記錄,並用Alt-N 向前尋找

 (在Mac 上,能夠試試使用Ctrl-P 和Ctrl-N )。以前的命令能夠從新調用並顯示,而且能夠編輯改變後運行。

 目錄切換

使用os.chdir方法,如下代碼爲linux,windows一樣適用 # 得到當前目錄 >>> import os >>> os.getcwd() '/home/piglei' # 改變工做目錄 >>> os.chdir("/dev") >>> os.getcwd() '/dev'
在shell中運行.py文件

>>> import os 載入os模塊 >>> os.chdir("X:\XXX\YYY...") 添加你的文件夾路徑 注意用路徑兩側有引號 >>> execfile("XXX.py") 在這個路徑中打開你的py文件

在Sublime Text2中運行python程序 按Ctrl + B, ESC退出python輸出窗口

字符串對象尋求幫助
s = 'abd'
dir(s)列出s能夠操做的函數方法,返回的是一個list對象

以後經過 help(s.replace)獲取具體的用法

相關文章
相關標籤/搜索