最近写了好多python,学到了不少知识,还有慕课网真的好好用哦!我都开始觉得coding越来越有意思了…
读入二进制文件(01组成即可)生成曲线图,横坐标间隔一个像素,纵坐标为8位二进制所对应的十进制数;第二个子图为经过cos处理的函数图,在process函数中可以任意改变数学运算。
这是我这学期写的第二个小程序,因为都在学英语。。虽然真的很短,但是在编码风格和规范上真的我尽力了,这是我写过最好看的程序了
"""
Author: Weihaoyu
Purpose:Chart project
Created: 2017-12-7
"""
import matplotlib.pyplot as plt
import tkFileDialog
import numpy as np
'''
function process(x):
a math function with the parameter x
here we return cos(x)
'''
def process(x):
np_x = np.array(x)
return np.cos(np_x)
'''
function read_file_to_list(x, y):
it opens a file and read it by every certain bytes to list x and y
it returns x and y list
'''
def read_file_to_list(x, y):
filename = tkFileDialog.askopenfilename(initialdir='C:/Desktop')
input_file = open(filename, 'rb')
try:
while True:
binary_chunk = input_file.read(8) # read the file by every 8 bytes
if not binary_chunk:
break
x.append(int(binary_chunk, base=2))
y.append(int(binary_chunk, base=2))
finally:
input_file.close()
return x, y
'''
function draw_chart(y1, y2):
it uses parameters y1 and y2 as y coordinate to draw two subplots
x automatically increases by one pixel
'''
def draw_chart(x, y):
plt.figure()
plt.subplot(211) # the first subplot
plt.ylabel("original decimal value")
plt.plot(x, 'm', linewidth=1.0)
plt.subplot(212) # the second subplot
plt.ylabel("processed decimal value")
plt.plot(y, 'c', linewidth=1.0)
plt.show()
if __name__ == "__main__":
y1 = [] # y coordinate of the first subplot
y2 = [] # y coordinate of the second subplot
(y1, y2) = read_file_to_list(y1, y2)
y2 = process(y2) # process the y coordinate of the second plot(y2)
draw_chart(y1, y2) # draw the chart
这里使用了matplotlib库来作图,它自带的控件非常好用,可以直接用drawChart函数里那几句话就生成一个图表。
我一共写了4个函数,一个主函数,一个读入文件的函数,一个画图函数和一个数学运算的处理函数。
这个程序只能读二进制文件,要想读入任意文件并转为二进制,好像可以用 struct.unpack这个函数,但是当时我怎么也跑不出,望指教
还有一个问题就是只能打开一次文件,然后就要关掉重跑这个程序才可以再打开另一个文件,这个可以用tkinter库来做一个小窗口,但是我做的时候有个问题就是我的函数有返回值,所以确认Button里command=read_file_to_list(x, y) 这个地方不知道返回值怎么取到