python - 使用 Python 2.7 解析文本

标签 python string python-2.7 split string-formatting

文本文件

• I.D.: AN000015544 
DESCRIPTION: 6 1/2 DIGIT DIGITAL MULTIMETER 
MANUFACTURER: HEWLETT-PACKARDMODEL NUM.: 34401A CALIBRATION - DUE DATE:6/1/2016 SERIAL NUMBER: MY45027398 
• I.D.: AN000016955 
DESCRIPTION: TEMPERATURE CALIBRATOR 
MANUFACTURER: FLUKE MODEL NUM.: 724 CALIBRATION - DUE DATE:6/1/2016 SERIAL NUMBER: 1189063 
• I.D.: AN000017259 
DESCRIPTION: TRUE RMS MULTIMETER 
MANUFACTURER: AGILENT MODEL NUM.: U1253A CALIBRATION - DUE DATE:6/1/2016 SERIAL NUMBER: MY49420076 
• I.D.: AN000032766                         
DESCRIPTION: TRUE RMS MULTIMETER                            
MANUFACTURER: AGILENT MODEL NUM.: U1253B CALIBRATION    -   DUE DATE:6/1/2016   SERIAL  NUMBER: MY5048  9036

目标

寻求更有效的算法来解析制造商名称和编号。即“惠普型号:34401A”、“安捷伦型号:U1253B”等。从上面的文本文件。

数据结构

parts_data = {'Model_Number': []}

代码

with open("textfile", 'r') as parts_info:
    linearray = parts_info.readlines(
    for line in linearray:
        model_number = ''
        model_name = ''
        if "MANUFACTURER:" in line:
            model_name = line.split(':')[1]
        if "NUM.:" in line:
            model_number = line.split(':')[2]
            model_number = model_number.split()[0]
            model_number = model_name + ' ' + model_number
            parts_data['Model_Number'].append(model_number.rstrip())

我的代码完全符合我的要求,但我认为有一种更快或更简洁的方法来完成操作。让我们提高效率吧!

最佳答案

您的代码看起来已经不错了,除非您解析的数据超过 GB,否则我不知道这样做有什么意义。我想到了一些事情。

如果您删除 linearray = parts_info.readlines( 行 Python 只理解对打开的文件使用 for 循环,这样就可以流式传输 以防万一你的文件很大。目前,这行代码会尝试一次将整个文件读入内存,而不是逐行读取,所以如果你的文件比你的内存大,你的计算机就会崩溃。

您还可以组合 if 语句并执行 1 条件,因为您似乎只关心拥有两个字段。为了使代码更简洁,您也不需要 model_number = ''; model_name = ''

保存诸如 line.split(':') 之类的结果会有所帮助。

或者,您可以尝试正则表达式。如果不对两者都进行测试,就不可能判断哪一个会表现得更好,这让我回到了我一开始所说的:优化代码很棘手,如果没有必要,真的不应该这样做。如果你真的非常关心效率,你会使用像 awk 这样用 C 编写的程序。

关于python - 使用 Python 2.7 解析文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30868697/

相关文章:

python - 如何检查子字符串是否在 Python 列表中多次出现?

java - 如何在java中生成不重复的随机字符串

javascript - JS : cache string array at client for entire session

python - 在 PyGame 中绘制沿直线方向的箭头

python - 在 Python 中查找 Safari 的高效用户代理正则表达式

python - 如何将纯文本信息添加到 Django 表单集中的表单?

python - 错误消息在 Django 中未按预期工作

python - PyParsing 和多行系统日志消息

python - 如何在 Django 管理中预填充 UserProfile 字段?

python - django导入错误: cannot import name list_route