• 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
寻求一种更有效的算法来解析制造商名称和编号。i、 e“HEWLETT-PACKARDMODEL NUM.:34401A”、“AGILENT MODEL NUM.: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())
我的代码正是我想要的,但是我认为有一种更快更干净的方法来完成这个任务行动。让我们提高效率!你知道吗
一种直接的方法是使用正则表达式:
结果:
我想到了几件事:
split(':')
,然后重用它:
的数目总是相同的,那么扔掉ifs并用长度检查一次我要用这样的东西结束了
你的代码看起来已经很好了,除非你正在解析超过GB的数据,否则我不知道这有什么意义。我想到了一些事情。你知道吗
如果删除
linearray = parts_info.readlines(
行,Python就可以理解,只要在打开的文件中使用for循环,这样就可以在文件很大的情况下使整个事情流化。目前,这行代码将尝试一次将整个文件读入内存,而不是逐行读取,因此如果文件大于内存,则会导致计算机崩溃。你知道吗您还可以组合if语句和do 1条件语句,因为您似乎只关心这两个字段。为了更干净的代码,您也不需要
model_number = ''; model_name = ''
保存
line.split(':')
之类的结果会有所帮助。你知道吗或者,你可以试试正则表达式。如果不同时测试两者,就不可能判断哪一个会表现得更好,这让我回到了我一开始所说的:优化代码是很棘手的,如果没有必要的话,真的不应该这样做。如果你真的,真的关心效率,你会使用一个像
awk
这样用C写的程序相关问题 更多 >
编程相关推荐