寫一百題程序學Python 【 21-30】

這次通過編寫程序對iris數據進行進行處理,得到了可以作爲數據集的iris數組,使用這個數組來訓練神經網絡。


21.讀取文件並存儲爲數組
filename = '/home/farell/pythonProject/iris_change.data'
input = [[0.0 for i in range(4)] for i in range(150)]
output = [[0.0 for i in range(3)] for i in range(150)]
i=0

with open(filename, 'r') as file_to_read:
    while True:
        lines = file_to_read.readline()
        lines = lines.strip('\n')
       # print(lines)
        if not lines :
            break
        input[i][0], input[i][1],input[i][2],input[i][3],output[i][0],output[i][1],\
        output[i][2] = [float(j) for j  in lines.split(',',6)]
        i=i+1
print(input)
print(output)


22.使用tensorflow訓練基於iris數據集的神經網絡
import time
import tensorflow as tf
filename = '/home/farell/pythonProject/iris_change.data'

#初始化一個數組,大小依照讀取的文件來決定
input = [[0.0 for i in range(4)] for i in range(150)]
output = [[0.0 for i in range(3)] for i in range(150)]
i=0

#添加層函數
def add_layer(inputs,in_size,out_size,activation_function=None):
    Weights = tf.Variable(tf.random_normal([in_size, out_size]))
    biases = tf.Variable(tf.zeros([1, out_size]) + 0.1)
    Wx_plus_b = tf.matmul(inputs, Weights) + biases
    if activation_function is None:
        outputs = Wx_plus_b
    else:
        outputs = activation_function(Wx_plus_b)
    return outputs

#文件打開處理,將每行的數據保存到數組中
with open(filename, 'r') as file_to_read:#消除換行符對於切割造成的影響
    while True:
        #讀取一行
        lines = file_to_read.readline()
        lines = lines.strip('\n')
        if not lines :
            break
        #切割並存儲到數組中
        input[i][0], input[i][1],input[i][2],input[i][3],output[i][0],output[i][1],\
        output[i][2] = [float(j) for j  in lines.split(',',6)]
        i=i+1
# print(input)
# print(output)

#輸入層設置
xs = tf.placeholder(tf.float32,[None,4])
ys = tf.placeholder(tf.float32,[None,3])

#添加輸入層,定義輸入爲4,隱藏層爲10
l1 = add_layer(xs,4,10,activation_function=tf.nn.sigmoid)
#添加輸出層,定義隱藏層爲10,輸出爲3
prediction = add_layer(l1,10,3,activation_function=None)

#錯誤率計算
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction),
                     reduction_indices=[1]))

#定義步長和優化器
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
init = tf.global_variables_initializer()

#初始化tensorflow
sess= tf.Session()
sess.run(init)

i=0
curloss = 1;
start = time.time()

#在錯誤率高於0.03之前持續計算
while curloss>0.03:
    sess.run(train_step,feed_dict={xs:input,ys:output})
    if i%500 == 0:
        prediction_value = sess.run(prediction, feed_dict={xs: input})
        curloss = sess.run(loss,feed_dict={xs:input,ys:output})
        print(curloss)
    i = i + 1

#輸出訓練神經網絡所用的時間
end = time.time()
print("Using time: ",(end-start))


23.輸出目錄下的所有文件
import os.path
import os
import PIL
path = r"E:\qqtemp"
print("Fuck you mother,sb python")
dirs = os.listdir(path)
for file in dirs:
    temp = path + '\\' + file
    print(temp)



24.將GIF動態圖片分解並將每幀保存爲png文件
def resolveGifImage(filepath):
    im = Image.open(filepath)
    mode = 'partial' #圖片模式
    i = 0
    p = im.getpalette() #獲取調色板信息
    last_frame = im.convert('RGBA')#轉換圖片色彩模式
    try:
        while True:
            print( "mode:%s No.%s size:%s tile:%s" % ( mode, i, im.size, im.tile))
            if not im.getpalette():#如果不存在調色板
              im.putpalette(p)#添加一個調色板
            new_frame = Image.new('RGBA', im.size)
            if mode == 'partial':
                new_frame.paste(last_frame)

            new_frame.paste(im, (0, 0), im.convert('RGBA'))
            new_frame.save('resolve//%s-%d.png' % (''.join(os.path.basename(filepath).split('.')[:-1]), i), 'PNG')

            i += 1
            last_frame = new_frame
            im.seek(im.tell() + 1)
    except EOFError:
           pass

resolveGifImage("load.gif")

參考:點擊打開鏈接


25.在圖片上添加文字


def addTextToImage(file,x,y,str):
    im = Image.open(file)
    draw = ImageDraw.Draw(im)
    draw.text((x,y),str,(0,0,0))
    draw = ImageDraw.Draw(im)
    shutil.copyfile(file, file+".bak")
    im.save(file)

addTextToImage("resolve//load-0.png",10,20,"Loading..")#在10,10位置添加一個Loading

使用默認字體,這裏有個缺點是,使用PIL不能輸入中文


26.向GIF動態圖片上添加文字
通過24和25的函數,目前可以拆解圖片以及添加文字,因此再編寫一個合成爲gif圖片的函數即可


# -*- coding: UTF-8 -*-
import imageio
import os
import shutil
import glob
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont
def resolveGifImage(filepath):
    im = Image.open(filepath)
    mode = 'partial' #圖片模式
    i = 0
    p = im.getpalette() #獲取調色板信息
    last_frame = im.convert('RGBA')#轉換圖片色彩模式
    if os.path.exists('resolve') == False:
        os.mkdir("resolve")
    try:
        while True:
            print( "mode:%s No.%s size:%s tile:%s" % ( mode, i, im.size, im.tile))
            if not im.getpalette():#如果不存在調色板
              im.putpalette(p)#添加一個調色板
            new_frame = Image.new('RGBA', im.size)
            if mode == 'partial':
                new_frame.paste(last_frame)

            new_frame.paste(im, (0, 0), im.convert('RGBA'))
            new_frame.save('resolve//%s-%d.png' % (''.join(os.path.basename(filepath).split('.')[:-1]), i), 'PNG')

            i += 1
            last_frame = new_frame
            im.seek(im.tell() + 1)
    except EOFError:
           pass

def addTextToImage(file,x,y,str):
    
    im = Image.open(file)
    draw = ImageDraw.Draw(im)
    draw.text((x,y),str,(0,0,0))
    draw = ImageDraw.Draw(im)
    if os.path.exists('change') == False:
        os.mkdir("change")
    im.save("change//"+file)

#構建GIF文件
def buildGifImage(buffer,targetfile,speed):
    frames = []
    for image in buffer:
        frames.append(imageio.imread(image))
    imageio.mimsave(targetfile, frames, 'GIF', duration= 0.1)

#查找目錄下的所有png文件
def find_all_png(path):

    png_filenames = glob.glob(path+"*.png")
    buf=[]
    for png_file in png_filenames:
        buf.append(png_file)
    return buf

#添加文字到GIF圖
def addTextToGif(file,x,y,str):
    resolveGifImage(file)
    if os.path.exists('resolve') == False:
        os.mkdir("resolve")
    for image in os.listdir("resolve"):
        addTextToImage("resolve/"+image,x,y,str)
    buildGifImage(find_all_png("change/resolve/"),"1.gif",0.1)


addTextToGif("load.gif",100,100,"Loading")
原圖:

修改後:



27.建立一個線程並運行

import _thread
import time

def printCurTime():
    threadname = "print"
    count = 0
    while count < 5:
        time.sleep(1)
        print("%s: %s" % (threadname, time.ctime(time.time())))

try:
    _thread.start_new_thread(printCurTime())
except:
    print("Create thread failed.")

while True:
    pass


28.傳遞參數給線程並打印日期
#!/usr/bin/python3

import _thread
import time

def printCurTime():
    threadname = "print"
    count = 0
    while count < 5:
        time.sleep(1)
        print("%s: %s" % (threadname, time.ctime(time.time())))
        count = count +1

def printAstring(i):
    count = 0
    while count < 2:
        time.sleep(2)
        print("%d" %(i))


try:
    _thread.start_new_thread(printCurTime,())
    _thread.start_new_thread(printAstring,(1,))
except:
    print("Create thread failed.")

while True:
    pass

這裏需要注意的是_thread.start_new_thread 函數的參數,第一個是函數的名稱,第二個是參數,如果沒有參數也需要有一組括號


29.使用Tkinter創建一個GUI,有Button和Listbox控件
#!/usr/bin/python3
from tkinter import *

def bt1():
    print("Button pressed")

root = Tk()
listb = Listbox(root)
btAction = Button(root,text="Hello button",relief=FLAT,command=bt1()).pack()
listb.pack()
root.mainloop()

30.python建立簡單的服務端
#!/usr/bin/python3
import socket
import wx
ip_port= ('192.168.1.161',9999)
web = socket.socket()
web.bind(ip_port)
web.listen(5)

while True:
    print("System running")
    conn, addr = web.accept()
    data = conn.recv(1024)
    print(data)
    conn.sendall(str('<h1>Welcome</h1>'))
    conn.close()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章