1111111111111111

### 考试系统部署

```

考评系统所有内容都基于宝塔安装的配置环境,宝塔里面环境配置好后其他设备在本地hosts文件添加配置好环境服务器的IP和网站名即可访问 


Linux安装宝塔

url=https://download.bt.cn/install/install_lts.sh;if [ -f /usr/bin/curl ];then curl -sSO $url;else wget -O install_lts.sh $url;fi;bash install_lts.sh ed8484bec

1.宝塔安装完后登录宝塔,点击【软件商店】菜单,安装以下环境
Nginx 1.24 如果没有找到此版本,选择最新版本即可
PHP 7.4 和 PHP 8.1
Mysql 5.7
phpMyAdmin 5.0 安装后设置php版本为7.4
Reids    7.0
进程守护管理器 3.0.5

PHP8.1点击【安装扩展】找到redis,点击安装,
【配置修改】:
max_execution_time 600
max_input_time 600
memory_limit 800M
post_max_size 500M
upload_max_filesize 500M
default_socket_timeout 600
【超时限制】100秒

PHP禁用函数检查,终端执行脚本 
curl -Ss https://www.workerman.net/webman/fix-disable-functions | php 
以解除禁用

2.点击【网站】菜单,点击【添加站点】按钮,输入域名zk.zwypt.com,数据库选择Mysql,输入数据库账号
和密码,php版本选择81,最后点击确定。

3.在【数据库】菜单找到创建的数据库,点击导入,点击【从本地上传】按钮,选择本地的SQL文件,上传后点击【导入】操作,完成数据库导入。点击【网站】菜单,点击刚才创建网站的根目录,进入网站根目录,上传部署文件,修改配置文件.env中的数据库配置和redis配置

4.到【软件商店】中点击【进程守护管理器】设置按钮,在设置界面点击【添加守护进程】按钮,
【添加守护进程】添加设置,
名称 examSystem
启动用户 www
运行目录 /www/wwwroot/zk.zwypt.com

启动命令根据上传网站的部署文件输入:

部署方式1. 项目为构建后的单文件webman.phar部署
启动命令 php webman.phar start

部署方式2.项目为源码部署
启动命令 php start.php start

点击确定后在进程列表查看进程管理是否是【已启动】

5.服务启动后回到【网站】,点击【网站名】,点击【网站目录】,选择运行目录为public,点击保存,点击【配置文件】,将以下配置文件复制进去

### 完整的站点配置文件参考:

```

upstream webmanzk {
    server 127.0.0.1:8788;
    keepalive 10240;
}

server
{
    listen 80;
    server_name zk.zwypt.com;
    index index.html index.php index.htm default.php default.htm default.html;
    root /www/wwwroot/zk.zwypt.com/public;

    #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
    #error_page 404/404.html;
    #SSL-END

    #ERROR-PAGE-START  错误页配置,可以注释、删除或修改
    #error_page 404 /404.html;
    #error_page 502 /502.html;
    #ERROR-PAGE-END

    #PHP-INFO-START  PHP引用配置,可以注释或修改
    include enable-php-81.conf;
    #PHP-INFO-END

    #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
    include /www/server/panel/vhost/rewrite/zk.zwypt.com.conf;
    #REWRITE-END
    
    location / {
      try_files $uri $uri/ /index.html;
    }
    location ^~ /api {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Connection "Keep-Alive";
        
        if (!-f $request_filename){
            proxy_pass http://webmanzk;
        }
        
    }
    
    location ^~ /teacher {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Connection "Keep-Alive";
        
        if (!-f $request_filename){
            proxy_pass http://webmanzk;
        }
        
    }
    
    location ^~ /student {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Connection "Keep-Alive";
        
        if (!-f $request_filename){
            proxy_pass http://webmanzk;
        }
        
    }

    #禁止访问的文件或目录
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md)
    {
        return 404;
    }

    #一键申请SSL证书验证目录相关设置
    location ~ \.well-known{
        allow all;
    }

    #禁止在证书验证目录放入敏感文件
    if ( $uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$" ) {
        return 403;
    }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
        expires      30d;
        error_log /dev/null;
        access_log /dev/null;
    }

    location ~ .*\.(js|css)?$
    {
        expires      12h;
        error_log /dev/null;
        access_log /dev/null;
    }
    access_log  /www/wwwlogs/zk.zwypt.com.log;
    error_log  /www/wwwlogs/zk.zwypt.com.error.log;
}
```

6.域名本地映射配置。
需要访问考试系统的设备,修改host文件,路径在【C:\Windows\System32\drivers\etc】添加以下配置
对应的考试系统ip zk.zwypt.com,例如服务器的内网ip为192.168.1.10,则添加配置如下:
192.168.1.10 zk.zwypt.com
```


### 文件服务器部署

```
注意:文件服务器占用服务器资源和存储空间较多,不建议跟考试系统部署在同一台服务器。

Linux安装宝塔

url=https://download.bt.cn/install/install_lts.sh;if [ -f /usr/bin/curl ];then curl -sSO $url;else wget -O install_lts.sh $url;fi;bash install_lts.sh ed8484bec

1.宝塔安装完后登录宝塔,点击【软件商店】菜单,安装以下环境
Nginx 1.24 如果没有找到此版本,选择最新版本即可
PHP 7.4 和 PHP 8.1
Mysql 5.7
phpMyAdmin 5.0 安装后设置php版本为7.4
Reids    7.0
进程守护管理器 3.0.5

PHP8.1点击【安装扩展】找到redis,点击安装,
【配置修改】:
max_execution_time 600
max_input_time 600
memory_limit 800M
post_max_size 500M
upload_max_filesize 500M
default_socket_timeout 600
【超时限制】100秒

PHP禁用函数检查,终端执行脚本 
curl -Ss https://www.workerman.net/webman/fix-disable-functions | php 
以解除禁用

2.点击【网站】菜单,点击【添加站点】按钮,输入域名files.zwypt.com,数据库选择Mysql,输入数据库账号
和密码,php版本选择81,最后点击确定。

3.在【数据库】菜单找到创建的数据库,点击导入,点击【从本地上传】按钮,选择本地的SQL文件,上传后点击【导入】操作,完成数据库导入。点击【网站】菜单,点击刚才创建网站的根目录,进入网站根目录,上传部署文件,修改配置文件.env中的数据库配置和redis配置

4.到【软件商店】中点击【进程守护管理器】设置按钮,在设置界面点击【添加守护进程】按钮,
【添加守护进程】添加设置,
名称 examSystem
启动用户 www
运行目录 /www/wwwroot/zk.zwypt.com

启动命令根据上传网站的部署文件输入:

部署方式1. 项目为构建后的单文件webman.phar部署
启动命令 php webman.phar start

部署方式2.项目为源码部署
启动命令 php start.php start

点击确定后在进程列表查看进程管理是否是【已启动】

5.服务启动后回到【网站】,点击【网站名】,点击【网站目录】,选择运行目录为public,点击保存,点击【配置文件】,将以下配置文件复制进去

### 完整的站点配置文件参考:


部署方式也跟上面考试系统相同步骤部署。网站名为files.zwypt.com
以下是对应的配置文件参考:
upstream webmanfile {
    server 127.0.0.1:8585;
    keepalive 10240;
}
server
{
    listen 80;
    listen 443 ssl http2;
    server_name files.zwypt.com;
    index index.html index.htm;
    root /www/wwwroot/file.zwypt.com/public;
    client_body_buffer_size 128k;
    client_max_body_size 500M;
    proxy_connect_timeout 600;
    proxy_send_timeout 600;
    proxy_read_timeout 600;
    send_timeout 600;
    
    location / {
      rewrite ^/$ /index/index last;
    }
    
    location ^~ /index {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        
        
        if (!-f $request_filename){
            proxy_pass http://webmanfile;
        }
        
    }

        #CERT-APPLY-CHECK--START
        # 用于SSL证书申请时的文件验证相关配置 -- 请勿删除
        include /www/server/panel/vhost/nginx/well-known/file.zwypt.com.conf;
        #CERT-APPLY-CHECK--END

    #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
    #error_page 404/404.html;
    ssl_certificate    /www/server/panel/vhost/cert/file.zwypt.com/fullchain.pem;
    ssl_certificate_key    /www/server/panel/vhost/cert/file.zwypt.com/privkey.pem;
    ssl_protocols TLSv1.1 TLSv1.2;
    ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    add_header Strict-Transport-Security "max-age=31536000";
    error_page 497  https://$host$request_uri;

    #SSL-END

    #ERROR-PAGE-START  错误页配置,可以注释、删除或修改
    #error_page 404 /404.html;
    #error_page 502 /502.html;
    #ERROR-PAGE-END

    #PHP-INFO-START  PHP引用配置,可以注释或修改
    include enable-php-00.conf;
    #PHP-INFO-END

    #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
    include /www/server/panel/vhost/rewrite/file.zwypt.com.conf;
    #REWRITE-END

    #禁止访问的文件或目录
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md)
    {
        return 404;
    }

    #一键申请SSL证书验证目录相关设置
    location ~ \.well-known{
        allow all;
    }

    #禁止在证书验证目录放入敏感文件
    if ( $uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$" ) {
        return 403;
    }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
        expires      30d;
        error_log /dev/null;
        access_log /dev/null;
    }

    location ~ .*\.(js|css)?$
    {
        expires      12h;
        error_log /dev/null;
        access_log /dev/null;
    }
    access_log  /www/wwwlogs/file.zwypt.com.log;
    error_log  /www/wwwlogs/file.zwypt.com.error.log;
}
```

### 其他说明:

```
网站日志文件路径:
runtime/logs
如果登录系统失败,可在此路径找到路径,查看对应日志文件的错误信息。
```

### 考试系统项目配置参考:

```
SERVICE_PORT=8787
APP_DEBUG=true
APP_URL=http://zk.zwypt.com
APP_NAME=教育系统

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=exam_system
DB_USERNAME=
DB_PASSWORD=

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=
REDIS_PORT=6379
```

### 文件系统项目配置参考:

```
IS_DEBUG=true
SERVER_PORT=8585
SERVER=http://0.0.0.0:8787
MAX_PACKAGE_SIZE=524288000

DB_HOST=127.0.0.1
DB_PORT=3306
DB_NAME=file_system
DB_USER=file_system
DB_PASSWORD=

REDIS_HOST=127.0.0.1
REDIS_PORT=6379
REDIS_PASSWORD=
REDIS_DB_INDEX=0

SINGLE_LOG_SIZE=2097152

FFMPEG_BINARIES=/www/server/ffmpeg/ffmpeg-6.1/ffmpeg
FFPROBE_BINARIES=/www/server/ffmpeg/ffmpeg-6.1/ffprobe
```

{{GY400,0000000000000000},{GY401,0000000000000000},{GY402,0000000000000000},{GY403,0000000000000000},{GY404,0000000000000000},{GY405,0000000000000000},{GY406,0000000000000000},{GY100,0000010100000101},{GY101,0000010100000101},{GY102,0000010100000101},{GY103,0000001100000101},{GY104,0000010100000101},{GY105,0000010100000101},{GY106,0000010100000101},{GY107,0000010100000101},{GY108,0000010100000101},{GY109,0000001100000101},{GY10A,0000010100000101},{GY10B,0000010100000101},{GY10C,0000010100000101},{GY10D,0000010100000001},{GY10E,0000010100000101},{GY10F,0000010100000101},{GY110,0000001100000101},{GY111,0000001100000101},{GY112,0000010100000101},{GY113,0000010100000101},{GY114,0000001100000011},{GY115,0000001100000011},{GY117,0000001100000011},{GY11E,0000000000000000},{GY11F,0000000100000000},{GY120,0001000100010001},{GY121,0001000100110011},{GY124,0011000100110011},{GY125,0001001100110011},{GY126,0001000100110001},{GY127,0011001100110001},{GY128,0001001100010011},{GY129,0001000100010011},{GY12A,0011001100010001},{GY12B,0001000000110011},{GY130,0000000100000001},{GY131,0000000100000101},{GY132,0000001100000101},{GY133,0000001100000011},{GY138,0000000100000001},{GY139,0000000100000001},{GY13A,0000000000000001},{GY150,0011000100110001},{GY151,1000000100010001},{GY152,0011000100010001},{GY153,0011000100010001},{GY154,1000000100010011},{GY155,0001000100010011},{GY156,0001001100110001},{GY157,0011000100010001},{GY158,1000000110000011},{GY159,0001001100010001},{GY15A,1000100010001000},{GY15B,1000100000011000},{GY15C,0000000010001000},{GY166,1000000000000001},{GY167,0000000000000000},{GY168,0000000000010001},{GY16A,0000000000000000},{GY16B,0000000000000000},{GY178,0000000101000000},{GY230,0000000000000000},{GY240,0000000000000000},{GY241,0000000000000000},{GY250,0000000000000000},{GY260,0000000000000000},{GY261,0000000000000000},{P1-D280,0000000000000000},{P1-D290,0000000000000000},{P1-D2A0,0000000000000000},{P1-D2B0,0000000000000000},{P1-D2C0,0000000000000000},{P1-D2D0,0000000000000000},{P2-D800,0000001001011000},{P2-D801,0000000000010001},{P2-D802,0000000000010101},{P2-D804,0000100110011001},{P2-D805,0000111111111111},{P2-D806,0000000001000101},{P2-D816,0000000000001000},{P2-D817,0000000000010011},{P2-D82B,0000000000000000},{P2-D82C,0000000000000000},{P2-D83B,0000000000000000},{P2-D84B,0000000000000000},{P2-D84C,0000000000000000},{P2-D85B,0000000000000000},{P2-D900,1111111111111111},{P2-D901,1111111111111111},{P2-D904,1111111111111111},{P2-D905,0000000000001101},{P2-D908,1111111111111111},{P2-D909,1111111111111111},{P2-D90C,1111111111111111},{P2-D90D,0000000000001101},{P2-D910,1111111111111111},{P2-D911,1111111111111111},{P2-D914,1111111111111111},{P2-D915,1111111111111111},{P2-D918,1111111111111111},{P2-D919,1111111111111111},{P2-D920,1111111111111111},{P2-D921,1111111111111111},{P2-D924,1111111111111111},{P2-D925,1111111111111111},{P2-D928,1111111111111111},{P2-D929,1111111111111111},{P2-D92C,1111111111111111},{P2-D92D,0000000000001101},{P2-D930,1111111111111111},{P2-D931,1111111111111111},{P2-D934,1111111111111111},{P2-D935,1111111111111111},{P2-D938,1111111111111111},{P2-D939,1111111111111111},{P2-D93C,1111111111111111},{P2-D93D,0000000000001101},{P2-D940,1111111111111111},{P2-D941,0000000000001101},{P2-D944,1111111111111111},{P2-D945,1111111111111111},{P2-D948,1111111111111111},{P2-D949,1111111111111111},{P2-D950,1111111111111111},{P2-D951,0000000000001101},{P2-D954,1111111111111111},{P2-D955,1111111111111111},{P2-D958,1111111111111111},{P2-D959,1111111111111111},{P2-D95C,1111111111111111},{P2-D95D,1111111111111111},{P2-D960,1111111111111111},{P2-D961,1111111111111111},{P2-D964,1111111111111111},{P2-D965,0000000000001101},{P2-D968,1111111111111111},{P2-D969,0000000000001101},{P2-D96C,1111111111111111},{P2-D96D,1111111111111111},{P2-D970,1111111111111111},{P2-D971,1111111111111111},{P2-D974,1111111111111111},{P2-D975,1111111111111111},{P2-D978,1111111111111111},{P2-D979,1111111111111111},{P2-D97C,1111111111111111},{P2-D980,1111111111111111},{P2-D988,1111111111111111},{P2-D989,1111111111111111},{P2-D990,1111111111111111},{P2-D991,1111111111111111},{P2-D994,1111111111111111},{P2-D995,1111111111111111},{P2-D998,1111111111111111},{P2-D999,0000000000010110},{P2-D99C,1111111111111111},{P2-D99D,1111111111111111},{P2-D9A0,1111111111111111},{P2-D9A1,1111111111111111},{P2-D9A4,1111111111111111},{P2-D9A5,1111111111111111},{P2-D9A8,1111111111111111},{P2-D9A9,1111111111111111},{P2-D9AC,1111111111111111},{P2-D9AD,1111111111111111},{P2-D9B8,1111111111111111},{P2-D9B9,1111111111111111},{P2-D9C0,1111111111111111},{P2-D9C1,1111111111111111},{P2-D9FF,1111111111111111},{P2-DA00,1111111111111111},{P2-DA04,1111111111111111},{P2-DA08,1111111111111111},{P2-DA40,1111111111111111},{P2-DA44,1111111111111111},{P2-DA58,1111111111111111},{P2-DA88,1111111111111111},{P2-DAA0,1111111111111111},{P2-DAA4,1111111111111111},{P2-DAA8,1111111111111111},{P2-DAAC,1111111111111111},{P2-DAB0,1111111111111111},{P2-DACC,1111111111111111},{P2-DAD4,1111111111111111},{P2-DAD8,1111111111111111},{P2-DADC,1111111111111111},{P2-DAE0,1111111111111111},{P2-DAE4,1111111111111111},{P2-DAE8,1111111111111111},{P2-DAF8,1111111111111111},{P2-DAFC,1111111111111111},{P3-DA9C,0000000000000001},{P3-DAC4,0000000000010000},{U600C,0000001011010000},{U6010,1100010000000000},{U6014,1100010000010000},{U6018,1100010000000000},{U601C,1100010000010000},{U6020,1100010000000000},{U6074,1100010000000000},{U607C,1100010000000000},{U6080,1100010000000000},{U6084,1100010000000000},{U6088,1100010000010000},{U60E4,0000000011110000},{U60E8,1100010000000000},{U60EC,1100010000000000},{U60F0,1100010000000000},{U60F4,1100010000010000},{U60F8,1100010000010000},{U6154,1100110000000000},{U615C,1100010000010000},{U6160,1100010000000000},{U6164,1100010000000000},{U6168,1100010000000000},{U61C4,1100010000000000},{U61CC,0000000000000000},{U61D4,1100000000000000},{U61E0,0100000101000000},{U61E4,0000000011110000},{U61EC,1100000000000000},{U61F4,1100000000000000},{U6240,1100000001000000},{U624C,0000000000000000},{U6254,0000000000000000},{U62A0,1100010010000000},{U62A8,1100011000000000},{U62B0,0000000000000000},{U61FC,1100010000010000},{U6200,0100000100000000},{U62CC,0000000000000000},{U6000,1100000010000000},{U6004,0100000001011000},{U6024,1100010000000000},{U60FC,1100010000000000},{U61C0,1100000000000000},{U61C8,1100000000000000},{U61D0,1100010000010000},{U61D8,0100110000010000},{U61DC,0100000000000000},{U6244,1100000000000000},{U6250,0000000000000000},{U6258,0000000000000000},{U62A4,0100000000000000},{U62AC,1100000100000000},{U62B4,1100000100000000},{U62B8,0000000000000001},{U62BC,1101000000000000},{U6204,0000000000000000},{U62C8,0000000000000000},{U6008,0100000001000000},{U6070,0000100001010000},{U60E0,0100000001000000},{U6150,0000100100010000},{U6208,0000000000000000},{P2-D701,0000000000010011},{P2-D81C,0000000000000101},{P2-D81B,0000000000010000},{GY116,0000000100000011},{P2-DA5C,1111111111111111},{P2-DA48,1111111111111111},{P2-D97D,0000000000001101},{P2-D981,0000000000001101},{P2-D709,0000000000100001},{P2-D81D,0000000000000011},{P2-D81E,0000000000010101}} Postgre数据表字段数据,用什么方法可以抽取P2-D81D,0000000000000011 数据将二进制数据转换为16进制数据然后转存到本地MYSQL数据库中
06-27
<think>我们需要从给定的字符串中抽取特定键(例如"P2-D81D")对应的二进制数据,然后将该二进制字符串转换为十六进制,最后存储到本地MySQL数据库中。步骤:1.解析输入字符串:输入字符串看起来像是一个列表,每个元素是一个花括号包围的键值对,键和值用逗号分隔。2.提取指定键("P2-D81D")的二进制字符串(即"0000000000000011")。3.将二进制字符串转换为十六进制字符串。注意:二进制字符串是16位,所以可以转换为4位十六进制(因为每4位二进制对应1位十六进制)。4.连接MySQL数据库,创建表(如果不存在)并插入数据。假设我们使用Python来完成这个任务。需要安装mysql-connector-python库(如果尚未安装,可以使用pipinstallmysql-connector-python)。但是,注意:给定的输入是一个长字符串,我们需要先解析它。它看起来像是一个由逗号分隔的多个{}包围的单元,但整个字符串被包裹在一个大括号{}中?实际上,输入格式是:以逗号分隔的多个记录,每个记录是`{key,value}`的形式,整个字符串由大括号包围?但这里给出的字符串开头和结尾并没有大括号,而是多个记录用逗号分隔。所以我们可以将它拆分为多个部分。然而,观察字符串,它是由逗号分隔的多个`{key,value}`,但注意有些记录的值内部有逗号(例如`{U6000,1100000010000000}`,但这里值部分没有逗号),所以我们可以用正则表达式或分割字符串的方法来提取。由于每个记录都是`{key,value}`形式,我们可以先去掉最外面的大括号?但实际上整个字符串并没有被大括号包裹,而是多个这样的结构用逗号连接。所以我们可以用以下步骤:-去掉字符串两端的空格和可能的括号?这里输入字符串开头和结尾都没有大括号,所以直接拆分。-我们可以按照`},{`来拆分?但注意第一个记录前面有`{`,最后面有`}`,所以我们可以先去掉整个字符串两端的`{{`和`}}`?但是这里没有,整个字符串是多个记录用逗号分隔,每个记录用大括号包围。实际字符串示例:`{GY400,0000000000000000},{GY401,0000000000000000},...`因此,我们可以先将字符串按`},{`拆分,然后去掉每个部分的开头和结尾的括号。更简单的方法:用正则表达式提取每个键值对。我们使用正则表达式:`\{([^,]+),([^}]+)\}`但是注意,有些键可能包含逗号吗?从给定的数据看,键都是类似"GY400","P2-D81D"这样的,没有逗号。值也是16位的0和1,也没有逗号。所以我们可以这样:步骤:1.用正则表达式匹配所有键值对。2.将匹配到的键值对存入字典,或者直接查找我们需要的键。或者,我们可以将字符串按逗号分割,但注意整个字符串中逗号有两种情况:分隔记录的逗号(在`}`和`{`之间)和每个记录内部分隔键和值的逗号。所以不能简单按逗号分割。使用正则表达式:代码示例:importrepattern=re.compile(r'\{([^,]+),([^}]+)\}')matches=pattern.findall(input_string)这样matches就是一个元组的列表,每个元组是(key,value)。然后我们遍历matches,找到键为"P2-D81D"的项,获取其值(二进制字符串)。3.将二进制字符串转换为十六进制:bin_str="0000000000000011"hex_str=hex(int(bin_str,2))[2:].upper().zfill(4)#因为16位,所以转换为4位十六进制,去掉0x前缀,并填充前导0至4位但是注意,我们转换后应该是4位,因为16位二进制正好是4位十六进制。所以不需要zfill(4)因为转换后就是4位(除非前面有0,但int转换会去掉前导0,所以我们需要用zfill(4)来补足4位?)例如:'0000000000000011'->转换成整数是3,然后hex(3)是'0x3',去掉0x后是'3',然后我们需要补足4位,所以是'0003'?但是这样不对,因为16位二进制转换后应该是4位十六进制,所以我们可以这样:hex_str=format(int(bin_str,2),'04X')#04X表示4位大写十六进制,不足4位前面补04.连接MySQL数据库,并插入数据。假设我们有一个MySQL数据库,地址为localhost,用户名为user,密码为passwd,数据库名为test_db,表名为converted_data,表结构如下:CREATETABLEconverted_data(idINTAUTO_INCREMENTPRIMARYKEY,key_nameVARCHAR(20)NOTNULL,bin_dataVARCHAR(16)NOTNULL,hex_dataVARCHAR(4)NOTNULL);5.插入数据:将我们提取的键、二进制字符串和十六进制字符串插入表中。注意:这里我们只提取一个键,但也可以提取多个。根据问题,我们只需要提取"P2-D81D"。下面给出完整代码:</think>要解决这个问题,我们需要完成以下步骤: 1. 解析输入数据并提取指定键值对 2. 将二进制字符串转换为十六进制 3. 将转换后的数据存储到MySQL数据库 以下是完整的Python解决方案: ```python import re import mysql.connector from mysql.connector import Error def extract_data(input_str, target_key): """从输入字符串中提取指定键的二进制数据""" pattern = re.compile(rf"{{{target_key},([01]{{16}})\}}") match = pattern.search(input_str) if match: return match.group(1) return None def bin_to_hex(bin_str): """将16位二进制字符串转换为4位十六进制字符串""" return format(int(bin_str, 2), '04X').upper() def save_to_mysql(key, bin_data, hex_data): """将数据保存到MySQL数据库""" try: connection = mysql.connector.connect( host='localhost', user='your_username', password='your_password', database='binary_data_db' ) cursor = connection.cursor() create_table_query = """ CREATE TABLE IF NOT EXISTS converted_data ( id INT AUTO_INCREMENT PRIMARY KEY, key_name VARCHAR(20) NOT NULL, binary_value CHAR(16) NOT NULL, hex_value CHAR(4) NOT NULL, timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) """ cursor.execute(create_table_query) insert_query = """ INSERT INTO converted_data (key_name, binary_value, hex_value) VALUES (%s, %s, %s) """ cursor.execute(insert_query, (key, bin_data, hex_data)) connection.commit() print(f"成功插入数据: {key} | {bin_data} -> {hex_data}") except Error as e: print(f"数据库错误: {e}") finally: if connection.is_connected(): cursor.close() connection.close() # 主程序 if __name__ == "__main__": # 示例输入数据(实际使用时应替换为完整数据) input_data = """{{GY400,0000000000000000},{GY401,0000000000000000},{P2-D81D,0000000000000011},{GY10D,0000010100000001}}""" target_key = "P2-D81D" # 提取二进制数据 bin_data = extract_data(input_data, target_key) if bin_data: print(f"找到 {target_key} 的二进制数据: {bin_data}") # 转换为十六进制 hex_data = bin_to_hex(bin_data) print(f"十六进制结果: {hex_data}") # 存储到MySQL save_to_mysql(target_key, bin_data, hex_data) else: print(f"未找到 {target_key} 的二进制数据") ``` ### 代码解释: 1. **数据提取(extract_data函数)**: - 使用正则表达式 `rf"{{{target_key},([01]{{16}})\}}"` 匹配指定格式 - `{target_key}` 替换为查找的键(如P2-D81D) - `([01]{16})` 匹配16位的二进制字符串 - 示例匹配:`{P2-D81D,0000000000000011}` 2. **二进制转十六进制(bin_to_hex函数)**: - 使用 `int(bin_str, 2)` 将二进制字符串转换为整数 - `format(..., '04X')` 格式化为4位大写十六进制(不足4位前面补0) 3. **MySQL存储(save_to_mysql函数)**: - 创建包含以下字段的表: - `key_name`: 原始键名(如P2-D81D) - `binary_value`: 原始二进制数据(16位) - `hex_value`: 转换后的十六进制数据(4位) - `timestamp`: 自动记录插入时间 - 使用参数化查询防止SQL注入 - 包含完整的错误处理 4. **执行流程**: - 从输入字符串提取目标键的二进制数据 - 转换为十六进制 - 连接到MySQL并存储结果 ### 使用前准备: 1. 安装必要库: ```bash pip install mysql-connector-python regex ``` 2. 创建MySQL数据库: ```sql CREATE DATABASE binary_data_db; GRANT ALL PRIVILEGES ON binary_data_db.* TO 'your_username'@'localhost' IDENTIFIED BY 'your_password'; ``` 3. 替换代码中的数据库凭据: ```python connection = mysql.connector.connect( host='localhost', user='your_username', # 替换为实际用户名 password='your_password', # 替换为实际密码 database='binary_data_db' ) ``` ### 示例输出: ``` 找到 P2-D81D 的二进制数据: 0000000000000011 十六进制结果: 0003 成功插入数据: P2-D81D | 0000000000000011 -> 0003 ``` ### 数据库表结构: ```sql mysql> DESCRIBE converted_data; +---------------+-------------+------+-----+-------------------+-------------------+ | Field | Type | Null | Key | Default | Extra | +---------------+-------------+------+-----+-------------------+-------------------+ | id | int | NO | PRI | NULL | auto_increment | | key_name | varchar(20) | NO | | NULL | | | binary_value | char(16) | NO | | NULL | | | hex_value | char(4) | NO | | NULL | | | timestamp | timestamp | YES | | CURRENT_TIMESTAMP | DEFAULT_GENERATED | +---------------+-------------+------+-----+-------------------+-------------------+ ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值