python黑屏改成白底_Python 进行黑屏 PNR 的提取

article/2025/10/7 8:53:23

重拾 Python 的学习,二刷了 Learn python the hard way 和廖雪峰老师的教程后,还是有点懵逼。考虑到日常工作常会给出一些逻辑判断相关的需求。就想尝试写一二个,毕竟学以致用。

最近给DT哥哥提了一个从中航信系统的返回内容提取 PNR 的逻辑,先说下 PNR —— Passenger Name Record 旅客订座记录,是系统用于查看所有关于乘客出行信息的唯一性编码,它大概有这些特征:

基本(核心)特征:PNR 一定是个 6 位的、由数字或字母拼的字符组

每一次封口(相当于保存操作)指令必定伴随着一个 PNR 的创建、修改或删除

PNR经常会展示在所在行的最前面,即:PNR是本行第一个字符组的概率很高

PNR有时会展示在返回内容的首行,但不是绝对的,所以只能辅助判断

PNR有时会单独占一行,即:若一行仅有一个字符组且字符组满足PNR的基本特征,那么它是PNR的概率很高

返回内容里很可能存在长度为6位但不是PNR的内容,即出发到达机场三字码的组合(比如PVGKIX代表上海到大阪),但幸运的是这种情况我们是比较容易排除的,比如三字码组的后方肯定是行动代码,而行动代码的格式是固定的

有一定的概率,返回内容会展示一行RT: PNR 的数据,即:当一行首个字符组是RT,第二个字符组符合PNR基本特征,那么它是编码的概率极高

编码是少有的可能在返回内容的不同行重复出现的,即:若返回内容里有多个符合PNR特征的相同字符组,那么该字符组是PNR的可能性进一步加高

如上文所述,封口对应的 PNR 操作可能有创建、修改、删除。我暂且先选择了创建时的场景进行识别,其程序逻辑描述大概有:

以空格为间隔符,查找返回内容每行的独立字符组,选取其中长度为6位由数字或字母的字符组,作为PNR待选项,设置每个符合该基本特征的字符组得分 1

若待选字符组是本行第1个字符组,则得分 +2 ,若该字符组行内下一个字符组为 '-'或'-EOT'或空则再 +1

若待选字符组是本行第2个字符组且第一个字符组为'RT'或'RT:',则得分 +3

若待选字符组下一个字符组是行动代码(格式为HK/DK/HL/HN+数字),则得分 -3

将相同待选字符组的得分相加,选择得分最高的作为 PNR 可能选项(后面还有一些其他选项不过都不是重点了)

说干就干,核心思路是利用正则进行提取和判断,我将多个样例内容存放在一个txt方便判断逻辑面对不同内容的识别准确度,为了查看文件,还需要用到 IO(用了比较省心的with open..)

import re #导入正则表达式模块

pnrlines = [] #定义文本行信息

with open('pnr.txt','r') as pnrtext: #打开待识别的txt文本

pnrlines = pnrtext.readlines() #提取每一行,去掉首位空格后赋值给行信息

通过readlines按行读取(“行”的概念后面要用到所以这里这样考虑了),并定义了后面会用到的各种特征的识别函数(符合基本特征的编码、RT、行动代码):

def getPnr(lineText): #定义根据空格或换行切分字符组的函数

get_pnr = re.split(r'[\s\n]+',lineText.strip())

return get_pnr

def findPnrs(lineText2): #定义判断条件:str是否为6位字母+数字,若是返回该值

if re.match(r'^([0-9a-zA-Z]{6})$',lineText2):

find_pnrs = re.match(r'^([0-9a-zA-Z]{6})$',lineText2).group()

elif re.match(r'^(HK|DK|HN)[0-9]{1}$',lineText2):

find_pnrs = 'PreNone'

elif re.match(r'^(RT|RT:)$',lineText2):

find_pnrs = 'NexPNR'

else:

find_pnrs = 'none'

return find_pnrs

轮询每行的每个字符,进行对字符的特征进行识别,标记其属性(待选项、RT、行动代码)并将打分预置

i = 0

for i in range(len(pnrlines)): #循环每一行

this_line = pnrlines[i]

pnrlist = getPnr(this_line)

print('第%d行:\n'%(i+1))

print('this_line: ',this_line)

print('pnrlist: ',pnrlist,'\n')

p = 0

q = p + 1

likePNR = []

PNRCODE = {}

defaultPsb = 0

for p in range(len(pnrlist)): #循环行内每个切分出的字符组

thisPnr = pnrlist[p]

pnrs = findPnrs(thisPnr) #判断字符组是否满足条件(6位字母+数字)

#print('NO.',p+1,': ',thisPnr,' | 结果: ',pnrs) #打印每个字符组的判断结果

likePNR.append(pnrs)

PNRCODE[pnrs] = 0

p += 1

#print('pnrcheck: ',likePNR)

if pnrs not in ('none','NexPNR','PreNone'):

psb = defaultPsb + 1

elif pnrs == 'NexPNR':

False

else:

psb = defaultPsb

PNRCODE[pnrs] = psb

PNRCODE['none'] = 0 #强行为dict增加一个none

del PNRCODE['none'] #删除dict里的none

print('PNRCODE: ',PNRCODE)

print('\n')

i += 1

运行后,得到了一个结果,当然这只是个中继,还没有判断加分项:

00-56-53.jpg

未完待续..


http://chatgpt.dhexx.cn/article/sL249iJ0.shtml

相关文章

计算机黑屏但是有鼠标,电脑桌面黑屏怎么解决 电脑黑屏怎么办 - 云骑士一键重装系统...

Ready 品牌型号:联想GeekPro 2020 系统:win10 1909 64位企业版 部分用户可能电脑型号不一样,但系统版本一致都适合该方法。 电脑桌面黑屏只有鼠标光标怎么办?下面就给大家分享电脑桌面黑屏只有鼠标光标的解决方法。 方法一: 按Ct…

ubantu 黑屏_死机黑屏专题上线啦,早鸟只要299,看完薪水翻一番

全程约5小时高清,140多页ppt,8大实验,基于x86_64的Centos 7.6和arm64,提供全套实验素材和环境。全面介绍kdumpcrash在死机黑屏方面的实战应用,全部案例源自线上云服务器和嵌入式产品开发实际案例! 看死机黑…

C语言程序运行黑屏,Win7开机黑屏代码0XC000000F的原因及解决方法

原标题:Win7开机黑屏代码0XC000000F的原因及解决方法 Win7开机黑屏出现0XC000000F代码是怎么回事?最近有用户朋友的电脑开机就遇到了这个问题,向云骑士求助。今天云骑士把解决该问题的方法整理一下,与大家一起分享。 原因分析: 这…

前端排查WebRtc黑屏记录

背景 本人前端开发,在做webrtc视频通话时,在部分安卓手机端,接收webrtc视频流黑屏,由于对webrtc不是太熟悉,一时不知道该如何下手排查。 第一步,发现问题的是安卓手机的webview,查看了webview版…

安装linux系统 黑屏,Ubuntu 16.04安装时显示器黑屏处理

问题描述: (1)Ubuntu 16.04使用USB启动盘安装时,出现"try ubuntu without installation"或“install ubuntu”选择,Enter选择安装后,显示器黑屏无任何显示。 (2)当Ubuntu系统安装结束后,系统启动后显示器黑屏…

计算机黑屏死机,电脑黑屏死机怎么解决(一键修复电脑黑屏死机的方式)

世界上有很多东西都会随着时间发生改变,但是Windows的BUG却不会。 对于微软来说,Windows系统在更新的同时又带来一堆BUG,已经是一项传统艺能。 放眼全球,大部分用户都曾遭到过Windows蓝屏死机的折磨。 资料显示,蓝屏死…

RV1109--LCD黑屏问题

RV1109–LCD黑屏问题 1、问题描述 平台:RV1109 需求:兼容一块10.1寸mipi的LCD屏(1218-A101NL66-28K),是rv1109的第10块屏幕,使用lcd_index10(lcd_index涉及到我司兼容LCD方式)来标…

C++实现系统黑屏

定义 电脑黑屏通常有两种定义,一种是指硬件黑屏,包括但不限于硬件故障、断电、显示器被硬件或软件关闭等;另一种是指系统层面上的黑屏,两种黑屏的最大差别就是系统层面上的黑屏会发光,而硬件黑屏则基本上不会。 这里…

C语言课程设计项目

C语言课程设计项目 团队介绍单位名怀化学院计算机科学与工程学院班级小组序号1901班第八组团队名称潜力无限组课程设计题目学生限时答题评测系统 一、课程设计题目基本要求介绍 (1) 输入信息:学生输入自己的学号姓名作为学生基本信息&…

C语言源码做的通讯录管理系统课程设计(源码+课程设计报告)

一、课程设计的目的: C语言课程设计是计算机科学与技术专业重要的实践性教学环节之一,本次设计结合实际应用的要求,使课程设计既覆盖C语言程序设计的知识点,又接近工程实际需要。本次设计的目的是通过课程设计的综合训练&#xf…

C语言源码做的班级档案管理系统课程设计(源码+课程设计报告)

一、课程设计的目的: C语言课程设计是计算机科学与技术专业重要的实践性教学环节之一,本次设计结合实际应用的要求,使课程设计既覆盖C语言程序设计的知识点,又接近工程实际需要。本次设计的目的是通过课程设计的综合训练&#xf…

【C++程序设计】课程设计报告

作者:何翔 学院:计算机学院 学号:04191315 班级:软件1903 完整资料:https://download.csdn.net/download/HXBest/75523613 项目资料下载:https://download.csdn.net/download/HXBest/21947475

C语言——课程设计

一、实验目的 了解开发环境掌握结构体变量的定义和使用;掌握结构体数组的定义和使用;掌握文件输入,输出基本方法掌握函数用法 二、实验内容 【项目1】完成以下功能的设计。 此学生成绩管理可以实现对学生成绩及基本信息进行创建、添加、删…

学生成绩管理系统-C语言(附源码和课程设计报告)

学生成绩管理系统-C语言&#xff08;附源码和课程设计报告&#xff09; 这是我初学C语言时的课程设计作业&#xff0c;源码贴出来希望对有需要的小伙伴有所帮助 系统功能层次图 头文件源代码 #include<stdio.h> #include<stdlib.h> #define FILENAME"stude…

通讯录管理系统 C语言课程设计实验报告

通讯录管理系统C语言课程设计 一、实验目的 1.巩固和加深学生对C语言课程的基本知识的理解和掌握 2.掌握C语言编程和程序调试的基本技能 3.利用C语言进行基本的软件设计 4.掌握书写程序设计说明文档的能力 5.提高运用C语言解决实际问题的能力 二.程序要求 学生信息包括&#x…

C语言学生成绩管理系统(课程设计报告书)

今天再跟大家分享一份课程设计报告&#xff1a;C语言学生成绩管理系统源码 程序设计组成框图&#xff1a; #include<stdio.h> #include<conio.h> #include<malloc.h> #include<string.h>typedef struct STUDENT { char studentNumber[10];/*学生学号*/…

记录C语言课程设计报告-图书管理系统

倾心原创&#xff0c;转载请备注原文地址&#xff0c;谢谢。 主要内容&#xff1a; 图书信息包括&#xff1a;书名、作者名、ISBN号、出版单位、出版年份、价格等。试设计一个图书信息管理系统&#xff0c;使之能提供以下功能&#xff1a; &#xff08;1&#xff09;系统以菜…

C语言课程设计

《C语言课程设计》任务书 课程设计名称&#xff1a;C语言课程设计&#xff08;C Language Designing &#xff09; 课程设计学分&#xff1a;1学分 课程设计时间&#xff1a;第一学年第1学期 课程设计学时&#xff08;周数&#xff09;&#xff1a;28学时&#xff08;1周&…

C语言课程设计报告-菜单设计

源代码&#xff1a;https://blog.csdn.net/queen00000/article/details/94468911 xxx大学 C语言课程设计报告 题 目 菜单设计 专业班级 组 别 学生姓名…

连续邮资问题

1、实验环境 Visual C 6.0 2、实验目的和要求 利用回溯法解决连续邮资问题。假设某国家发行了n种不同面值的邮票并且规定每张信封上最多只允许贴m张。对于给定的n和m的值&#xff0c;给出邮票面值的最佳设计&#xff0c;使得可在1张信封上贴出从邮资1开始&#xff0c;增量为…