如何基于多字符拆分行以提取坐标与数值参数?
如何拆分文件行获取x、y坐标和数值?
我正在读取一个包含多行如下内容的文件:
1,1; 4
1,2; 6
2,4; 12
...
其中前两个数字为坐标x、y,第三个数字为数值。尝试过rstrip后按";"拆分得到['x,y', ' value'],按","拆分得到['x', 'y; value'],想知道怎么拆分才能得到三个独立参数:x_coordinate、y_coordinate、value。
我的现有代码如下:
file = open(filename, "r") for row in file: row = row.rstrip() parts = row.split(";") coordinates = row.split(",") x_coordinate = int(coordinates[0]) y_coordinate = int(coordinates[0][1]) value = int(parts[3]) area_list[x_coordinate-1][y_coordinate-1] = value
原代码存在的问题
y_coordinate = int(coordinates[0][1])逻辑错误:coordinates[0]是x的字符串值,取索引1会拿到x的第二个字符(比如x是12的话会得到'2'),完全不是y坐标。value = int(parts[3])会触发索引越界:按;拆分后parts只有两个元素,索引3不存在。
几种可行的解决方案
方案1:分步拆分(最直观)
先按分号拆分出坐标段和数值段,再拆分坐标段得到x、y:
with open(filename, "r") as file: for row in file: row = row.strip() # 去除首尾空白(含换行符) coord_segment, value_segment = row.split(";") x_str, y_str = coord_segment.split(",") # 转换为整数并赋值 x_coordinate = int(x_str) y_coordinate = int(y_str) value = int(value_segment.strip()) # 去除数值前的空格 area_list[x_coordinate-1][y_coordinate-1] = value
方案2:字符串替换后统一拆分
把分号加空格替换成逗号,直接按逗号拆分所有项:
with open(filename, "r") as file: for row in file: row = row.strip() # 把"; "替换成", ",让整行格式变为x,y,value x_str, y_str, value_str = row.replace("; ", ",").split(",") x_coordinate = int(x_str) y_coordinate = int(y_str) value = int(value_str) area_list[x_coordinate-1][y_coordinate-1] = value
方案3:正则表达式(适配格式波动)
如果文件行的空格数量不固定(比如分号后可能有多个空格),用正则表达式提取更稳妥:
import re with open(filename, "r") as file: # 正则匹配数字格式的x、y和value,允许分号后任意空格 pattern = r"(\d+),(\d+);\s*(\d+)" for row in file: match_result = re.match(pattern, row.strip()) if match_result: x_coordinate = int(match_result.group(1)) y_coordinate = int(match_result.group(2)) value = int(match_result.group(3)) area_list[x_coordinate-1][y_coordinate-1] = value
注:建议使用
with语句打开文件,它会在代码块结束后自动关闭文件,避免资源泄漏问题。
内容的提问来源于stack exchange,提问作者Erkki Jytky
相关产品推荐
相关产品推荐

