Attention:
學習注重的就是持之以恆,如果只是靠着瞭解新東西的新鮮度學習,那麼便不會持久,更不會學到真正的知識。
好的,本blog在於分享一些基礎的知識,並不進行深入的講解。在這裏只是給介紹一些,大家會一次又一次遇到的問題,同時介紹一下python必須會用到的小工具。
1、查找特定文件
關於文件的操作一般都需要導入OS模塊
import os
如果你想要查詢的文件,在目錄“find_file_path",那麼便將這個目錄付給變量path
path = “find_file_path"
Q: so why?
A: 1、減少編寫的代碼的長度,同時增加代碼的可閱讀性。
eg:在編寫代碼的後面會多次且重複的使用到這個目錄,如果將其值賦給path,可大大的節約 代碼量,同時更重要的還有如下:
2、將目錄信息賦給path,其中一個原因便是爲了增加代碼的可重用性,
eg:如果下次你想查找文件"find_file_A_path",那麼便可以直接更改path的值,而不用一個一個 的全部修改
將帶查找的名稱,也賦值給一個變量
filename = "target_file"
前置知識儲備:
獲取path文件下的所有子文件,並存儲到files中。
files = os.listdir(path)
eg: 如下圖所示,獲取"prac"文件下的所有子文件。如圖紅線框中所示:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-oOVCcIQT-1588575019729)(C:\Users\kingdom\AppData\Roaming\Typora\typora-user-images\image-20200504104219956.png)]
輸出:
['items.py', 'middlewares.py', 'pipelines.py', 'settings.py', 'spiders', '__init__.py', '__pycache__']
之後循環每個"path",下的所有子文件。
1、如果存在文件夾,重複上述操作,
2、如果存在文件,觀察文件是否符合要求,符合要求則存儲,不符合則continue
全部代碼如下圖所示:
def findfiles(path):
files = os.listdir(path)
for f in files:
f_path = os.path.join(path,f)
if os.path.isdir(f_path):
findfiles(f_path)
if filename in f:
result.append(os.path.join(path,f))
print("第{}個數據爲 : {}".format(len(result),f_path))
同時,也存在另一個方法,os.walk,如果想具體瞭解,可以進行點擊訪問,進行學習
全部代碼如下:
def findfiles_(path):
#在這裏寫下您的查找文件代碼吧!
for root,dirs,files in os.walk(path):
for f in files:
if filename in f:
result.append(os.path.join(root,f))
print(len(result),'\t',os.path.join(root,f))
最終可以在main函數中進行調用
if __name__ == '__main__':
findfiles(path)
print()
result = []
findfiles_(path)
2、圖片的數據處理
Q: 我們人類可以通過直接看圖片,瞭解圖片需要表達的信息,那計算機呢?
A: 計算機不能直接讀取,我們需要將圖片轉化爲數據,具體如下所示:
提前知道:
我們假設本文件夾下有一個"img.png"圖片,大小爲255*255."prac.py"是我們編寫的程序文件。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ZQ0DjRlo-1588575019733)(C:\Users\kingdom\AppData\Roaming\Typora\typora-user-images\image-20200504110207098.png)]
本程序需要用到python中一個不得不學的模塊cv2,如想深入瞭解,請務必點擊進行深入學習
imoprt cv2
-
首先讀入圖片文件
license_plate = cv2.imread('./img.png')
! Attention:
cv2.imread() 接口讀取圖像,讀進來的直接是rgb格式,且數據都在0-255
-
轉化爲灰度圖
gray_plate = cv2.cvtCOlor(license_plate,cv2.COLOR_RGB2GRAY)
cv2.COLOR_RGB2GRAY-----------color_rgb2gray------->rgb two(to) gray
如需詳細請點擊瞭解cv2.cvtCOlor()
-
圖像閾值處理
ret, binary_plate = cv2.threshold(gray_plate, 175, 255, cv2.THRESH_BINARY)
像素高於閾值時,給像素賦予新值。即濾除過大或者過小的元素。常用於從灰度圖中獲取二進制圖像,同時也可以用於消除噪音。
-
歸一下處理
result = [] for col in range(binary_plate.shape[1]): result.append(0) for row in range(binary_plate.shape[0]): result[col] = result[col] + binary_plate[row][col]/255
3、畫圖
matplotlib模塊是,程序員必須要掌握的,計算機中各種運算過程都是"封閉"的,當然封閉這個詞說的有點不太準確,但是可以表達運算的未知性。爲了瞭解模型的好壞,出現問題的大致位置,梯度下降的過程,過擬合、欠擬合的具體發生時機,我們都需要可視化!將其一步步的運行結果畫成圖表,媽媽便再也不用擔心我的調優啦。
好吧,言歸正傳。
-
導入各種模塊:
import matplotlib.pyplot as plt import numpy as np import json import matplotlib.font_manager as font_manager import pandas as pd
-
讀取數據:
df = pd.read_json('data/20510522.json') zone_list = s.index count_list = s.values
-
設置畫圖的各種小細節,如字體大小等
# 設置顯示中文 plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默認字體 plt.figure(figsize=(20,15)) plt.bar(range(len(count_list)), count_list,color='r',tick_label=zone_list,facecolor='#9999ff',edgecolor='white') # 這裏是調節橫座標的傾斜度,rotation是度數,以及設置刻度字體大小 plt.xticks(rotation=45,fontsize=20) plt.yticks(fontsize=20) plt.legend() plt.title('''This is Title''',fontsize = 20) plt.savefig('work/result/bar_result02.jpg')#圖像的保存位置 plt.show()
可運行代碼如下所示:
import matplotlib.pyplot as plt
import numpy as np
import json
import matplotlib.font_manager as font_manager
import pandas as pd
#顯示matplotlib生成的圖形
%matplotlib inline
df = pd.read_json('data/data31557/20200422.json')
#print(df)
grouped=df['name'].groupby(df['zone'])
s = grouped.count()
zone_list = s.index
count_list = s.values
# print(zone_list)
# print(count_list)
# 設置顯示中文
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默認字體
plt.figure(figsize=(20,15))
plt.bar(range(len(count_list)), count_list,color='r',tick_label=zone_list,facecolor='#9999ff',edgecolor='white')
# 這裏是調節橫座標的傾斜度,rotation是度數,以及設置刻度字體大小
plt.xticks(rotation=45,fontsize=20)
plt.yticks(fontsize=20)
plt.legend()
plt.title('''This is Title''',fontsize = 20)
plt.savefig('/home/aistudio/work/result/bar_result02.jpg')
plt.show()
ps:沒有數據還是運行不出來的。如果想試一下的話,數據點擊網站獲取:
提取碼:9ehv
同時python還有另一個強大無與倫比的庫pyecharts,用這個方法畫出來的圖超級專業的給你講,話不多說,上圖!
如果有想仔細瞭解的同學,除了訪問官方API還可以點擊網站進行進一步學習