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
一、method 1.數據結構
items
=
dict
.items()
items.sort()
for
key,value
in
items:
print
key, value
|
二、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:
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()
,就能夠設置一個斷點:
序列是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 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))
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
使用notepad 替換python2中的print 括號
print (.*?);?$
print\( $1\)
python安裝各類第三方庫
(1) 畫圖操做
(2) 經常使用命令
python -m pip list 列出安裝的包
(3) Numpy
經常使用機器學習依賴包:
重複前一條命令
若是想要在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)獲取具體的用法