TCP服務(wù)端&db轉(zhuǎn)圖像

第一段代碼實(shí)現(xiàn)功能:
1、將數(shù)據(jù)根據(jù)指定的協(xié)議轉(zhuǎn)換成txt文件
2垢夹、將列表的數(shù)值的長(zhǎng)度變?yōu)殡S機(jī)數(shù)
3溢吻、校驗(yàn)txt文件內(nèi)容是否正確(這個(gè)比較雞肋)后來(lái)發(fā)現(xiàn)winhex有搜索功能
4、建立TCP服務(wù)端發(fā)送指定數(shù)據(jù)果元,可以自定義數(shù)據(jù)量(可以優(yōu)化一下檢測(cè)對(duì)方啥時(shí)候斷開(kāi)連接)

第二段代碼實(shí)現(xiàn)功能:
將以下格式的db文件的data9行轉(zhuǎn)換成圖像

CREATE TABLE member (
    id         INT           PRIMARY KEY,
    DATE       VARCHAR (256),
    [data1 ]   VARCHAR (128),
    [data2 ]   VARCHAR (128),
    [data3 ]   VARCHAR (128),
    [data4 ]   VARCHAR (128),
    [data5 ]   VARCHAR (128),
    [data6 ]   VARCHAR (128),
    [data7 ]   VARCHAR (128),
    [data8 ]   VARCHAR (128),
    [data9 ]   VARCHAR (128)
);

第三段代碼實(shí)現(xiàn)功能:
因?yàn)榘l(fā)送的數(shù)據(jù)是固定的格式一直循環(huán)這里根據(jù)造數(shù)據(jù)的公式將促王,對(duì)端處理過(guò)后的數(shù)據(jù)算出出來(lái)然后讀取db文件在和前20列數(shù)據(jù)進(jìn)行對(duì)比校驗(yàn)這樣可以驗(yàn)證數(shù)據(jù)內(nèi)容是否正確

import time
import socket
import struct
import math
import datetime
import threading
import random

def the_not(value, pos):
    """
    指定位數(shù)取反
    :param value:數(shù)據(jù)
    :param pos: 位數(shù)
    leng 傳遞二進(jìn)制長(zhǎng)度 - 1
    將 獲取到的數(shù)據(jù)轉(zhuǎn)換為2進(jìn)制后,將數(shù)據(jù)的最高位去除而晒,
    如數(shù)據(jù)長(zhǎng)度未滿足pos長(zhǎng)度將會(huì)在高位補(bǔ)零蝇狼,并將其余所
    有位數(shù)0和1置換在從最高位補(bǔ)1并返回
    :return:
    """

    if value == 0:
        value = 1
    value = value - 1
    value = "{0:b}".format(value)
    a = ((pos * 8) - 1)
    value = value.rjust(a, '0')
    value = value.replace('1', '2')
    value = value.replace('0', '1')
    value = value.replace('2', '0')
    value = '1' + value
    value = hex((int(value, 2)))[2:]
    value = value.rjust((pos * 2), '0')

    return value


# -> object 描述返回值數(shù)據(jù)類型
def Override_override(ov: object, value: object, leng: object) -> object:
    """
    更改字符串指定位置的字符
    :param ov: 被更改的老字符串
    :param value: 更改的值
    :param leng: 起始位置
    :return: 更改后的字符串
    """
    len_ = int(len(value))
    # print(f"ov值為:{ov},新的值為:{ov[:leng * 2] + value + ov[leng + (leng * 2):]}")
    return ov[:leng * 2] + value + ov[len_ + (leng * 2):]


def float_to_hex(f):
    return hex(struct.unpack('<I', struct.pack('<f', f))[0])


def type_hex(value_, type_, Positive_and_Negative=0) -> str:
    """
    輸入值和數(shù)據(jù)類型 默認(rèn)為正數(shù) 并根據(jù)對(duì)應(yīng)的解析方式返回16進(jìn)制的值
    :param value_: 值
    :param type_: 數(shù)據(jù)類型
    :param Positive_and_Negative: 正負(fù)項(xiàng)
    :return: 16進(jìn)制的值
    """
    if Positive_and_Negative == 1:
        if type_ == 'f':
            data10 = float(value_)
            data10hex = float_to_hex(data10)[2:]
            data10hex = bin(int(data10hex, 16))[2:]
            data10hex = hex(int('1' + data10hex.rjust(31, '0'), 2))[2:]
            return data10hex.rjust(8, '0')
        elif type_ == 'i':
            data10 = int(value_)
            return the_not(data10, 4)
        elif type_ == 's':
            data10 = int(value_)
            return the_not(data10, 2)
        elif type_ == 'c':
            data10 = hex(int(value_))[2:]
            return data10.rjust(2, '0')
    elif Positive_and_Negative == 0:
        if type_ == 'f':
            data10 = float(value_)
            data10hex = float_to_hex(data10)[2:]
            return data10hex.rjust(8, '0')
        elif type_ == 'i':
            data8hex = hex(int(value_))[2:]
            return data8hex.rjust(8, '0')
        elif type_ == 's':
            data8hex = hex(int(value_))[2:]
            return data8hex.rjust(4, '0')
        elif type_ == 'c':
            data10 = hex(int(value_))[2:]
            return data10.rjust(2, '0')


def type_hex_new(value_, type_, Positive_and_Negative=0) -> str:
    """
    輸入值和數(shù)據(jù)類型 默認(rèn)為正數(shù) 并根據(jù)對(duì)應(yīng)的解析方式返回 置返的16進(jìn)制的值
    :param value_:
    :param type_:
    :param Positive_and_Negative:
    :return:
    """
    hex_ = type_hex(value_, type_, Positive_and_Negative=Positive_and_Negative)
    if type_ == 'f':
        a = int(hex_[0:2], 16)
        b = int(hex_[2:4], 16) * 256
        c = int(hex_[4:6], 16) * (256 * 256)
        d = int(hex_[6:8], 16) * (256 * 256 * 256)
        max_ = hex(int(a + b + c + d))[2:]
        max_ = max_.rjust(8, '0')
        return max_
    elif type_ == 'i':
        a = int(hex_[0:2], 16)
        b = int(hex_[2:4], 16) * 256
        c = int(hex_[4:6], 16) * (256 * 256)
        d = int(hex_[6:8], 16) * (256 * 256 * 256)
        max_ = hex(int(a + b + c + d))[2:]
        max_ = max_.rjust(8, '0')
        return max_
        # = '0x' + hex_[0:2]
    elif type_ == 's':
        a = int(hex_[0:2], 16)
        b = int(hex_[2:4], 16) * 256
        max_ = hex(int(a + b))[2:]
        max_ = max_.rjust(4, '0')
        return max_
    elif type_ == 'c':
        return hex_


def Generate_data(message_len: int, type_='00', models: str = '01') -> object:
    """
    輸入 數(shù)據(jù)長(zhǎng)度 和數(shù)據(jù)類型,以及分機(jī)號(hào)倡怎,返回一個(gè)長(zhǎng)度400的數(shù)組
    data_type:更改為0 返回的數(shù)據(jù)為1024隨機(jī)數(shù)據(jù)類型题翰,1為自定義數(shù)據(jù)
    :type type_: object
    :param message_len: 報(bào)文長(zhǎng)度 1 - 1024 int類型
    :param type_: 報(bào)文類型 01 00 str
    :param models: 分機(jī)號(hào) 為 01 - 04 str
    :return:返回制造的數(shù)據(jù)數(shù)組
    """
    message_list = []
    data_num = 0
    for z in range(-200, 201):
        z = int(math.fabs(z))
        a = int((z * z) / (2 * 100))
        data_type = 1

        if data_type == 1:
            # char
            Data1 = type_hex(str(z % 2), 'c')
            # shoar
            data2 = type_hex_new(str(31267 + a), 's')
            # float
            data3 = type_hex_new(str((z * z) / (2 * 100)), 'f')
            # int
            data4 = type_hex_new(str(100000 + (z * 100000)), 'i')
            print(data4,'==',(100000 + (z * 100000)))
            # char
            data5 = type_hex(str(((z + 1) % 2) * 5), 'c')
            # float
            data6 = type_hex_new(str(0.99 + (z * 10)), 'f')
            # shoar 負(fù)數(shù) 遞增
            data7 = type_hex_new(str(31267 - z), 's', Positive_and_Negative=1)
            # int1
            data8 = type_hex_new(str(800000 + (a * 50000)), 'i')
            # int 負(fù)數(shù)
            data9 = type_hex_new(str(100000 + (z * 100000)), 'i', Positive_and_Negative=1)
            # float 負(fù)數(shù)
            data10 = type_hex_new(str((z * z) / (2 * 100)), 'f', Positive_and_Negative=1)
            # char 55
            data11 = type_hex_new(str(z % 2 * 85), 'c')
            # shoar 負(fù)數(shù)遞減
            data12 = type_hex_new(str(31267 + z), 's', Positive_and_Negative=1)
            # float 改
            data13 = type_hex_new(str(0.4 + (z * 2)), 'f')
            # int 改
            data14 = type_hex_new(str(100000 + (z * 83000)), 'i')
            # float 改
            data15 = type_hex_new(str(0.3 + (z * 0.1)), 'f')
            # shoar
            data16 = type_hex_new(str(150 * z), 's')
            # char
            data17 = type_hex_new(str(z % 2 * 165), 'c')
            # shoar 負(fù)數(shù)
            data18 = type_hex_new(str((30 * a)), 's')
            # int
            data19 = type_hex_new(str((a * 20000)), 'i')
            # char
            data20 = type_hex(str((z % 2) * 90), 'c')
            Data_Sum = '0'
            # 設(shè)置長(zhǎng)度
            Data_Sum = Data_Sum.ljust((2 * message_len), "0")
            Data_Sum = Override_override(Data_Sum, Data1, 0)
            Data_Sum = Override_override(Data_Sum, data2, 1)
            Data_Sum = Override_override(Data_Sum, data3, 3)
            Data_Sum = Override_override(Data_Sum, data4, 7)
            Data_Sum = Override_override(Data_Sum, data5, 11)
            Data_Sum = Override_override(Data_Sum, data6, 12)
            Data_Sum = Override_override(Data_Sum, data7, 16)
            Data_Sum = Override_override(Data_Sum, data8, 18)
            Data_Sum = Override_override(Data_Sum, data9, 22)
            Data_Sum = Override_override(Data_Sum, data10, 26)
            Data_Sum = Override_override(Data_Sum, data11, 30)
            Data_Sum = Override_override(Data_Sum, data12, 31)
            Data_Sum = Override_override(Data_Sum, data13, 33)
            Data_Sum = Override_override(Data_Sum, data14, 37)
            Data_Sum = Override_override(Data_Sum, data15, 41)
            Data_Sum = Override_override(Data_Sum, data16, 45)
            Data_Sum = Override_override(Data_Sum, data17, 47)
            Data_Sum = Override_override(Data_Sum, data18, 48)
            Data_Sum = Override_override(Data_Sum, data19, 50)
            Data_Sum = Override_override(Data_Sum, data20, 54)

            for value_w in range(1, 18):
                Data_Sum = Override_override(Data_Sum, Data_Sum[0:55 * 2], 55 * value_w)
            start = 990
            Data_Sum = Override_override(Data_Sum, Data1, start + 0)
            Data_Sum = Override_override(Data_Sum, data2, start + 1)
            Data_Sum = Override_override(Data_Sum, data3, start + 3)
            Data_Sum = Override_override(Data_Sum, data4, start + 7)
            Data_Sum = Override_override(Data_Sum, data5, start + 11)
            Data_Sum = Override_override(Data_Sum, data6, start + 12)
            Data_Sum = Override_override(Data_Sum, data7, start + 16)
            Data_Sum = Override_override(Data_Sum, data8, start + 18)
            Data_Sum = Override_override(Data_Sum, data9, start + 22)
            Data_Sum = Override_override(Data_Sum, data10, start + 26)
            Data_Sum = Override_override(Data_Sum, data11, start + 30)
            Data_Sum = Override_override(Data_Sum, data12, start + 31)
            Data_Sum = Override_override(Data_Sum, data20, start + 33)
            Data_Sum = Override_override(Data_Sum, Data_Sum, 1024)
            Data_Sum = Override_override(Data_Sum, Data_Sum, 1024 * 2)
            Data_Sum = Override_override(Data_Sum, Data_Sum, 1024 * 3)
            Data_Sum = Override_override(Data_Sum, Data_Sum, 1024 * 4)
            Data_Sum = Override_override(Data_Sum, Data_Sum, 1024 * 5)
            Data_Sum = Override_override(Data_Sum, Data_Sum, 1024 * 6)
            Data_Sum = Override_override(Data_Sum, Data_Sum, 1024 * 7)


        elif data_type == 0:
            data_num = data_num + 1
            if data_num > 255:
                break
            # int 正
            # data_1 = type_hex_new(str(100000 + (z * 100000)), 'i')
            # # flot 負(fù)數(shù)
            # data_1 = type_hex_new(str((z * z) / (2 * 100)), 'f', Positive_and_Negative=1)
            # # char
            # data_1 = type_hex(str(z % 2), 'c')
            # data_1 = type_hex_new(str(31267 - z), 's', Positive_and_Negative=1)
            # 報(bào)文長(zhǎng)度
            Data_Sum = str()
            data_num1 = hex(data_num)[2:].rjust(2, '0')
            # print(data_num)
            for i in range(message_len + 1):
                Data_Sum = Data_Sum + data_num1
            # Data_Sum = Data_Sum.rjust(2,message_len, data_num)
            # 填滿1024

            # for value_w in range(0, message_len, 2):
            #
            #     Data_Sum = Override_override(Data_Sum, hex(value_w), 2)

        # 設(shè)置報(bào)文類型
        Message_type = type_
        #
        # if type_ == '00' and '01':
        #     Message_type = type_
        # else:
        #     if z % 2 == 0:
        #         Message_type = '00'
        #     else:
        #         Message_type = '01'

        # 設(shè)置長(zhǎng)度
        byte_len = int(message_len) * 2
        Data_Sum = Data_Sum[0:byte_len]

        Message_len = hex(int(byte_len / 2))[2:].rjust(4, '0')
        # test = (z, '=======', '1', Data_Sum)
        #
        # with open('test.txt', 'a') as f:
        #     f.write(str(test) + '\n')
        data_sum = ()

        message = 'ffffffffffff' + Data_Sum + 'ffffffffffff'
        # message = '01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 %s %s %s '\
        #           '00 00 00 00 00 00 %s 30 30' % (models, Message_type, Message_len, Data_Sum)

        message_list.append(Data_Sum)
    print(f'數(shù)據(jù)長(zhǎng)度為{len(message_list[0]) / 2}Generate_data')
    return message_list


def change_list_lengths(list_data, v_min, v_max):
    # 生成隨機(jī)的 n 值
    # l = len(list_data)
    # Value_len = len(list_data[0])
    # str_len = l * Value_len
    new_list = []
    buf_value = ''
    for i in reversed(list_data):
        r = random.randint(v_min, v_max) * 2

        buf_value = i + buf_value
        while buf_value != '' and r < len(buf_value):
            if r > len(buf_value):
                break

            new_list.append(buf_value[-r:])
            buf_value = buf_value[:-r]
            r = random.randint(v_min, v_max) * 2


    if buf_value:
        new_list.append(buf_value)

    return new_list[::-1]



def abjust_list_length(lst, length):

    if length < len(lst):
        lst = lst[:length]
    elif length > len(lst):
        extra = length - len(lst)
        multiplier = (extra // len(lst)) + 2
        lst = (lst * multiplier)[:length]
    return lst


def write_list_to_txt(lst, filename):
    with open(filename, 'w') as file:
        for item in lst:
            file.write(item)


def write_data_to_file(data_list, file_name):
    header = "GLSecurity".encode("utf-8")
    footer = "GLSecurity".encode("utf-8")
    interval = 0.2  # 包時(shí)間戳遞增間隔,單位為秒
    timestamps = time.time() - 86400 * 100

    with open(file_name, "wb") as f:
        packets = []
        for i, data in enumerate(data_list):

            current_timestamp = timestamps + i * interval
            timestamp = time.strftime("%y %m %d %H %M %S", time.localtime(current_timestamp))
            hex_time = ''.join(hex(int(num_str))[2:].zfill(2)for num_str in timestamp.split())
            timestamp_bytes = bytes.fromhex(hex_time)
            data_length = int(len(data)/2).to_bytes(2, byteorder='big')
            data_length = bytearray([data_length[1],data_length[0]])
            checksum = b"\x00\x00"  # 校驗(yàn)位先預(yù)留兩個(gè)字節(jié)诈胜,填充為00
            packet = header + timestamp_bytes + data_length + bytes.fromhex(data) + checksum + footer
            packets.append(packet)

            if i % 10 == 9:
                f.write(b''.join(packets))
                f.flush()
                packets.clear()

        if packets:
            f.write(b''.join(packets))
            f.flush()
    print(
        f"總長(zhǎng)度為:{len(packet)},header長(zhǎng)度:{len(header)},時(shí)間戳長(zhǎng)度:{len(timestamp_bytes)},len長(zhǎng)度{len(data_length)},數(shù)據(jù)長(zhǎng)度:{len(bytes.fromhex(data))}冯事,數(shù)據(jù)尾長(zhǎng)度:{len(checksum)},footer長(zhǎng)度:{len(footer)}")
    print(f"數(shù)據(jù)已寫(xiě)入文件: {file_name}")


def test_write_data_to_file(data_list, file_name):
    with open(file_name, "w") as f:
        for i, data in enumerate(data_list):
            f.write(data)



def split_string(string,n):
    n = n * 2
    substrings = []

    while len(string) > n:
        substring = string[:n]
        substrings.append(substring)
        string =string[n:]
    if string:
        substrings.append(string)

    def package_data(data):
        data_list = []
        for index, value in enumerate(data):

            datas = ascii_to_hex('##AABBFF')

            # datas = datas + (hex(int(len(value) / 2))[2:].rjust(4, '0'))
            # datas = datas + hex(len(data))[2:].rjust(4, '0')
            # datas = datas + hex(index + 1)[2:].rjust(4, '0')
            # 后續(xù)更改
            datas = datas + ascii_to_hex(str(hex(int(len(value) / 2))[2:].rjust(4, '0')))
            datas = datas + ascii_to_hex(str(hex(len(data))[2:].rjust(4, '0')))
            datas = datas + ascii_to_hex(str(hex(index + 1)[2:].rjust(4, '0')))

            datas = datas + value
            datas = datas + ascii_to_hex('FFBBAA##')
            data_list.append(datas)
        return data_list

    return package_data(substrings)


def ascii_to_hex(string):
    hex_representation = ''
    for char in string:
        ascii_value = ord(char)
        hex_value = hex(ascii_value)[2:]
        hex_representation += hex_value + ''
    return hex_representation.strip()


def count_data_in_txt(file_name, footer=b'GLSecurity'):
    count = 0

    with open(file_name, 'rb') as f:
        while True:
            packet = f.read()
            if not packet:
                break

            if footer in packet:
                count += packet.count(footer)

    return count/2


class TcpServer:
    def __init__(self, host, port, data):
        self.host = host
        self.port = port
        self.server_soket = None
        self.client_soket = None
        self.data = data

    def start(self):
        self.server_soket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        self.server_soket.bind((self.host,self.port))

        self.server_soket.listen(1)

        print(f"Server listeing on {self.host}:{self.port}")

        self.client_soket, addr = self.server_soket.accept()
        print(f"Connected to {addr[0]}:{addr[1]}")
        while True:
            choice = input("輸入 1 發(fā)送 0 退出")
            if choice == "1":
                data_list = self.send_messg()

                file_name = input("輸入保存文件名")
                test_write_data_to_file(data_list, file_name + '.txt')
            elif choice =='0':
                break
            else:
                print("輸入無(wú)效重新輸入")

        return data_list

    def send_messg(self):
        cont = 0
        data_list = []
        # num_ = 1
        while True:
            try:
                num_ = int(input("請(qǐng)輸入發(fā)包數(shù)量"))
                # num_ = 10
                break
            except ValueError:
                print("輸入有誤重新輸入")

        while cont < num_:

            for i in self.data:
                cont += 1
                if cont > num_:
                    break

                print(cont, 'time:', datetime.datetime.now())

                for j in split_string(i, 1400):
                    self.client_soket.sendall(bytes.fromhex(j))
                    data_list.append(j)

                    # print(j)
                time.sleep(0.05)
        return data_list


if __name__ == '__main__':

    data1 = Generate_data(10240, type_='01', models='04')


    # print(type_hex_new(str(1024), 's'))

    # prject = TcpServer('192.168.2.10', 10297,data1)
    #
    # data_list = prject.start()

    # for i in data1:
    #     for j in split_string(i, 1400):
    #         print(j)
    #
    data1 = abjust_list_length(data1, 3000)
    # data1 = change_list_lengths(data1, 1, 1474)
    # print(data1)
    test_write_data_to_file(data1, 'test22.txt')
    # num = count_data_in_txt('D:\program_files\PlaybackSoftware\Config\協(xié)議自動(dòng)解析\隨機(jī)長(zhǎng)度30000條.txt')
    # print(f'報(bào)文數(shù)量為:{num}')

import sqlite3
import matplotlib.pyplot as plt

def get_data19():
    connection = sqlite3.connect("data_2023_09_13_10_00_57.db") 
    cursor = connection.cursor()

    # 查詢"data19"列的所有數(shù)據(jù)
    cursor.execute("SELECT data19 FROM member")
    result = cursor.fetchall()

    # 將查詢結(jié)果存儲(chǔ)到列表中
    data19_list = [row[0] for row in result]

    connection.close()

    return data19_list

def plot_data(data):
    x = range(len(data))  # x軸的數(shù)據(jù)點(diǎn)為列表的索引
    y = data

    plt.plot(x, y, marker='o')  # 繪制折線圖
    plt.xlabel('Index')  # 設(shè)置x軸標(biāo)簽
    plt.ylabel('Value')  # 設(shè)置y軸標(biāo)簽
    plt.title('Plot of Data')  # 設(shè)置圖表標(biāo)題
    

    plt.show()

# 示例用法
data = get_data19()
print(data)

plot_data(data)

校驗(yàn)sql

import sqlite3
import math


def numberCheck(url):
    con = sqlite3.connect(url)
    cur = con.cursor()
    # cur.execute("PRAGMA table_info([member])")
    # tabName = cur.fetchall()
    # for name in tabName:
    #     print(name[1])
    # cur.execute("SELECT id FROM member WHERE type='table';")
    # Tables = cur.fetchall()
    # print(Tables)

    res = cur.execute("SELECT * FROM member limit 3000")

    a = res.fetchall()


    con.close()
    return a


swj = numberCheck("23-03-12-20-20-53-3.db")

def data_():
    data = []
    for z in range(-200, 201):
        ddar = []
        z = int(math.fabs(z))
        a = int((z * z) / (2 * 100))
        # char 1
        ddar.append((bin(z % 2))[2:].rjust(8,'0'))
        # shoar2
        ddar.append(31267 + a)
        # float3
        ddar.append((z * z) / (2 * 100))
        # int4
        ddar.append(100000 + (z * 100000))
        # char5
        ddar.append(bin(((z + 1) % 2) * 5)[2:].rjust(8,'0'))
        # float6
        ddar.append(0.99 + (z * 10))
        # shoar 負(fù)數(shù) 遞增7
        ddar.append(-(31267 - z))
        # int8
        ddar.append(800000 + (a * 50000))
        # int 負(fù)數(shù)9
        ddar.append(-(100000 + (z * 100000)))
        # float 負(fù)數(shù)10
        ddar.append(-((z * z) / (2 * 100)))
        # char 55 11
        ddar.append(bin((z % 2 * 85))[2:].rjust(8, '0'))
        # shoar 負(fù)數(shù)遞減12
        ddar.append(-(31267 + z))
        # float 改13
        ddar.append(0.4 + (z * 2))
        # int 改14
        ddar.append(100000 + (z * 83000))
        # float 改15
        ddar.append(0.3 + (z * 0.1))
        # shoar16
        ddar.append(150 * z)
        # char17
        ddar.append((z % 2 * 165))
        # shoar 負(fù)數(shù)18
        ddar.append(((30 * a)))
        # int19
        ddar.append(a * 20000)
        # char20
        ddar.append(((z % 2) * 90))

        ddar = ddar * 18

        ddar = ddar + ddar[:12]

        ddar.append(ddar[19])
        # print(ddar[19])
        # for i,j in enumerate(ddar):
        #     print(i,j)
        ddar = ddar * 8
        data.append(ddar)
    return data + data
#
# for i in data_():
#     print(i)
b = data_() * 8

dataError = []
print("實(shí)際發(fā)送的數(shù)據(jù)\t|\t上位機(jī)解析后的數(shù)據(jù)")
for i in range(3000):
    charError = []
    floatError = []
    intErrot = []
    for j in range(373):
       test_data = swj[i][j + 2]
       data = b[i][j]
       if type(data) == str:
           test_data = str(test_data)
           if data == test_data:
               ...
           else:
               charError.append(j + 1)
               print(f'源數(shù)據(jù):{data}焦匈,過(guò)濾數(shù)據(jù):{test_data}\t列:{j + 1}\t第{i}條報(bào)文')
       elif type(data) == float:
           test_data = float(test_data)
           if (math.fabs(data - test_data)) <0.01:
               ...
           else:
               floatError.append(j + 1)
               print(f'源數(shù)據(jù):{data},過(guò)濾數(shù)據(jù):{test_data}\t列:{j + 1}\t第{i}條報(bào)文')
       elif type(data) == int:
           test_data = int(test_data)
           if data == test_data:
               ...
           else:
               intErrot.append(j + 1)
               print(f'源數(shù)據(jù):{data}昵仅,過(guò)濾數(shù)據(jù):{test_data}\t列:{j + 1}\t第{i}條報(bào)文')

    # print(f'charError:{charError},floatError:{floatError},intError:{intErrot}')
    # for i in charError:
    #     print(f"char出錯(cuò)列:{i}")
    # for i in floatError:
    #     print(f"float出錯(cuò)列:{i}")
    # for i in intErrot:
    #     print(f"int出錯(cuò)列:{i}")
    #    print(f"{j + 1}\t{test_data}\t\t{data}")



最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末缓熟,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子摔笤,更是在濱河造成了極大的恐慌够滑,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吕世,死亡現(xiàn)場(chǎng)離奇詭異彰触,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)命辖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)况毅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)分蓖,“玉大人,你說(shuō)我怎么就攤上這事尔许∶春祝” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵味廊,是天一觀的道長(zhǎng)蒸甜。 經(jīng)常有香客問(wèn)我,道長(zhǎng)余佛,這世上最難降的妖魔是什么柠新? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮衙熔,結(jié)果婚禮上登颓,老公的妹妹穿的比我還像新娘。我一直安慰自己红氯,他們只是感情好框咙,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著痢甘,像睡著了一般喇嘱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上塞栅,一...
    開(kāi)封第一講書(shū)人閱讀 51,598評(píng)論 1 305
  • 那天者铜,我揣著相機(jī)與錄音,去河邊找鬼放椰。 笑死作烟,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的砾医。 我是一名探鬼主播拿撩,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼如蚜!你這毒婦竟也來(lái)了压恒?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤错邦,失蹤者是張志新(化名)和其女友劉穎探赫,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體撬呢,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡伦吠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片讨勤。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡箭跳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出潭千,到底是詐尸還是另有隱情谱姓,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布刨晴,位于F島的核電站屉来,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏狈癞。R本人自食惡果不足惜茄靠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蝶桶。 院中可真熱鬧慨绳,春花似錦、人聲如沸真竖。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)恢共。三九已至战秋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間讨韭,已是汗流浹背脂信。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留透硝,地道東北人狰闪。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像濒生,于是被迫代替她去往敵國(guó)和親尝哆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容