【发布时间】:2021-11-26 01:29:40
【问题描述】:
我正在开发一个程序来读取 CSV 文件并从中创建信息字典。 CSV 中的每一行本质上是一个新的字典条目,其中分隔对象是值。
作为任务的一个子部分,我需要从字符串中提取未知数量的数字。我有一个工作版本,但它似乎不是很pythonic。
示例字符串如下所示:
variable = Applicaiton.Module_Name.VAR_NAME_ST12.WORD_type[0]
variable是python代码中的字符串名称,代表MODBUS中的变量名。我只想提取 .WORD_type[0] 之前的数字,这些数字与字符串打包到的字节数有关。
这是我的工作代码,请注意,它嵌套在 for 语句中,该语句遍历 CSV 中的行。 var_length 和 var_type 是keys 的一部分,即{"var_length": var_length}
if re.search(".+_ST[0-9]{1,2}\\.WORD_type.+", variable):
var_type = "string"
temp = re.split("\\.", variable)
temp = re.split("_", temp[2])
temp = temp[-1]
var_length = int(str.lstrip(temp, "ST")) / 2
【问题讨论】:
-
这绝对是xy problem。询问您实际尝试实现的目标并显示实际输入和所需输出。
csv.DictReader和str.isdigit可能可以完成大部分繁重的工作。 -
您说存在“未知的数字位数”,但您的正则表达式将其限制为 1 位或 2 位。也不清楚变量的名称是
variable还是variable实际上是字符串的一部分。 -
@DeepSpace,我无法使用
csv模块,因为设备上可用的模块有限。也有字符串中可能有其他数字的情况。 -
@Selcuk 我现在将其限制为 2 位数字,因为这些实际上对应于变量在 MODBUS 中打包的字节数。
-
为什么不能简单地将现有的正则表达式与捕获组一起使用,例如
print(re.search(".+_ST([0-9]{1,2})\\.WORD_type.+", variable).groups())而不是尝试再次解析字符串,使用拆分和切片?