python | 读入二进制文件生成曲线图的小程序

First

最近写了好多python,学到了不少知识,还有慕课网真的好好用哦!我都开始觉得coding越来越有意思了…

Second

function:

读入二进制文件(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个函数,一个主函数,一个读入文件的函数,一个画图函数和一个数学运算的处理函数。

Third

不足之处:

这个程序只能读二进制文件,要想读入任意文件并转为二进制,好像可以用 struct.unpack这个函数,但是当时我怎么也跑不出,望指教

还有一个问题就是只能打开一次文件,然后就要关掉重跑这个程序才可以再打开另一个文件,这个可以用tkinter库来做一个小窗口,但是我做的时候有个问题就是我的函数有返回值,所以确认Button里command=read_file_to_list(x, y) 这个地方不知道返回值怎么取到

你可能感兴趣的:(python)