如何修复含单双空格分隔的数值输入数据的分割代码?
问题修复:处理带不同空格数量的数值分割
我来帮你搞定这个分割问题!核心原因是你用split(" ")按单个空格分割时,会把连续的空格(比如正数前的两个空格)拆分成空字符串,而且每行开头的空格也会导致列表里出现空元素,这就干扰了后续的数据处理。
修复方案1:使用默认的split()方法
Python的字符串split()方法如果不带任何参数,会自动分割任意数量的空白字符(包括单个空格、多个连续空格、制表符等),同时还会忽略字符串开头和结尾的空白,完美适配你这种正数前多空格、负数前单空格的情况。
修改后的代码如下:
def switch(letter): switcher = { "[": "", "]": "", "\n": "@", } return switcher.get(letter, letter) converted_data = '' with open("/Users/naghmeh/Documents/python/core1", "r") as file: data = file.read() for letter in data: letter = switch(letter) converted_data += letter # 按@分割成每行数据 converted_data = converted_data.split('@') split_converted_data = [] for line in converted_data: # 用不带参数的split()处理空白分割 parts = line.split() # 过滤掉可能的空行(如果文件末尾有换行的话) if parts: # 把字符串转成整数(可选,根据你的需求) num_list = [int(num) for num in parts] split_converted_data.append(num_list)
修复方案2:使用正则表达式分割
如果你需要更灵活的分隔符控制,可以用re.split()来匹配一个或多个空格:
import re # ...前面的代码和方案1一样... for line in converted_data: parts = re.split(r'\s+', line.strip()) if parts: num_list = [int(num) for num in parts] split_converted_data.append(num_list)
这里r'\s+'表示匹配一个或多个空白字符,line.strip()先去掉每行开头结尾的空白,确保不会出现空元素。
额外优化建议
你的switch函数可以用更高效的str.translate()方法替代,避免循环每个字符:
# 创建转换表:把[、]替换成空,换行替换成@ trans_table = str.maketrans({'[': '', ']': '', '\n': '@'}) with open("/Users/naghmeh/Documents/python/core1", "r") as file: data = file.read() converted_data = data.translate(trans_table)
这段代码和你原来的循环处理效果完全一致,但运行效率更高哦!
内容的提问来源于stack exchange,提问作者user12904074
相关产品推荐
相关产品推荐

