Python中使用for循环跳过dat文件空行的实现问题
问题:读取含大量空行的dat文件并提取有效数据
我尝试编写代码读取包含大量空行的dat文件,并将有效数据存入列表以便后续处理。
示例数据
0.92; 0.70 1.53; 1.41; 1.00 1.47; 1.08 ; 0.73; 0.18 1.50; 1.17 ; ; 1.68;
我希望跳过包含空白内容的行,目前我的代码如下:
file_name2 = 'Gliese.dat' filein2 = open(file_name2, 'r') lines2 = filein2.readlines() data2 = [] filein2.close() for line in lines2: data2.append(line) for i in data2: items2 = i.split(';') if items2[0]=='' or items2[1]=='': items2.strip() else: ms_U_B.append(float(items2[1])) ms_B_V.append(float(items2[0]))
运行时出现错误:ValueError: could not convert string to float:' '
我是Python新手,希望得到帮助。
问题分析与修正方案
核心问题
- 空白字符未处理:split后的元素常带有空格、换行符,直接转float会失败;你判断空字符串的逻辑不对,实际空白内容是带空格的
' ',不是空字符串''。 - 无效行处理逻辑错误:
items2.strip()是无效操作,strip是字符串方法,需对单个元素调用。 - 冗余代码:
for line in lines2: data2.append(line)完全没必要,直接遍历lines2即可。 - 列表未初始化:代码中使用的
ms_U_B和ms_B_V未提前定义,会触发NameError。
修正后的代码
file_name2 = 'Gliese.dat' # 先初始化要存储数据的列表 ms_U_B = [] ms_B_V = [] # 用with语句自动管理文件,无需手动close with open(file_name2, 'r') as filein2: for line in filein2: # 去掉整行首尾的空白(包括换行符),空行直接跳过 line_clean = line.strip() if not line_clean: continue # 按分号分割行内容 items = line_clean.split(';') # 对每个分割后的元素单独去空白 val1 = items[0].strip() val2 = items[1].strip() # 只有两个值都非空时,才转换为浮点数存入列表 if val1 and val2: ms_B_V.append(float(val1)) ms_U_B.append(float(val2))
关键说明
with语句会自动关闭文件,避免手动close可能带来的资源泄漏。- 先对整行做strip,快速过滤空行;再对每个分割元素做strip,处理内部空格。
- 只有两个值都有效时才存入列表,确保不会出现转换失败的情况。
内容的提问来源于stack exchange,提问作者Gavin Donohue
相关产品推荐
相关产品推荐

