因此,我有一个文件,从视觉系统中导入大量数据。它将数据保存在文本文件中,大约有4000行文本,每个结果有1行。我将在下面添加1行作为示例。
11/02/1970;11:56:44.000;ID;002914;轻型检查;254个;管宽1;38.7;管宽2;39.2;管宽3;39.9;管宽4;40.9;管宽5;41.2;固定行;175.20;固定孔;211.23;柱宽;0.00;布卢布尺寸;0;左角;0.00;右角;17.90;黑布布;0;0;0;全球St;14;工具系数;31;托盘编号;108;
所以我想要做的是为每一行提取一个参数以及它的值。在每一个空格之间都有一个分隔符,这使我很难。
所以如果我想选择Light,我会得到每一行的验光结果,在这个例子中是254。有人能提出一些我可以使用的功能来帮助我吗?
发布于 2022-02-04 08:31:02
我建议使用正则表达式(这里是re模块),让file.txt内容
11/02/1970; 11:56:44.000;ID;002914;Light Check;254;Tube Width1;38.7;Tube Width2;39.2;Tube Width3;39.9;Tube Width4;40.9;Tube Width5;41.2;Fixt Row;175.20;Fixt Col;211.23;Post Width;0.00;Blob Size;0;Left Angle;0.00;Right Angle;17.90;Dark Blob;0;Result;0;Global St;14;Tool Flag;31;Pallet No; 108;然后
import re
with open("file.txt","r") as f:
for line in f:
print(re.search(r"Light Check;([0-9]+)",line).group(1))输出
254说明:我迭代了以下几行(for line in f,因此不需要将整个文件加载到内存中),然后在每一行中我在Light Check;之后找到一个或更多(+)位数([0-9])。注意,(和)中有数字,它们是捕获组(第一个和唯一的),我使用group(1)访问这个组。免责声明:此解决方案假定Light Check;后面有1位或更多位数在file.txt的每一行中。
发布于 2022-02-04 08:24:24
要将这一行拆分成字典,我会这样做:
s = "11/02/1970; 11:56:44.000;ID;002914;Light Check;254;Tube Width1;38.7;Tube Width2;39.2;Tube Width3;39.9;Tube Width4;40.9;Tube Width5;41.2;Fixt Row;175.20;Fixt Col;211.23;Post Width;0.00;Blob Size;0;Left Angle;0.00;Right Angle;17.90;Dark Blob;0;Result;0;Global St;14;Tool Flag;31;Pallet No; 108;"
s = s.split(";")
data = {key: val for key, val in zip(s[::2], s[1::2])}回传
data
{'11/02/1970': ' 11:56:44.000', 'ID': '002914', 'Light Check': '254', 'Tube Width1': '38.7', 'Tube Width2': '39.2', 'Tube Width3': '39.9', 'Tube Width4': '40.9', 'Tube Width5': '41.2', 'Fixt Row': '175.20', 'Fixt Col': '211.23', 'Post Width': '0.00', 'Blob Size': '0', 'Left Angle': '0.00', 'Right Angle': '17.90', 'Dark Blob': '0', 'Result': '0', 'Global St': '14', 'Tool Flag': '31', 'Pallet No': ' 108'}然后你就可以
data['Light Check']要获得
'254'发布于 2022-02-04 08:35:37
将数据结构转换为dict列表:
import csv
from datetime import datetime
with open('data.txt') as fp:
reader = csv.reader(fp, delimiter=';')
data = []
for row in reader:
row = row[:-1]
d = {'dt': datetime.strptime(row[0] + row[1], '%d/%m/%Y %H:%M:%S.%f'),
'id': row[3]}
keys = row[4::2]
vals = map(float, row[5::2])
d.update(dict(zip(keys, vals)))
data.append(d)输出:
>>> data
[{'dt': datetime.datetime(1970, 2, 11, 11, 56, 44),
'id': '002914',
'Light Check': 254.0,
'Tube Width1': 38.7,
'Tube Width2': 39.2,
'Tube Width3': 39.9,
'Tube Width4': 40.9,
'Tube Width5': 41.2,
'Fixt Row': 175.2,
'Fixt Col': 211.23,
'Post Width': 0.0,
'Blob Size': 0.0,
'Left Angle': 0.0,
'Right Angle': 17.9,
'Dark Blob': 0.0,
'Result': 0.0,
'Global St': 14.0,
'Tool Flag': 31.0,
'Pallet No': 108.0}]使用Python进行搜索:
out = [rec for rec in data if rec.get('Light Check') == 254]与Pandas搜索:
df = pd.DataFrame(data)
out = df[df['Light Check'] == 254]https://stackoverflow.com/questions/70983201
复制相似问题