Python 3.5如何按首列大于0的条件读取文本文件到列表?
嘿,这个需求我之前处理过,刚好可以给你几个实用的方案,都是Python 3.5能直接用的:
方案一:原生逐行读取(最灵活,无依赖)
这是我最推荐的方法,完全不依赖第三方库,而且能自适应不同文件的起始行,不管前面有多少行不符合条件都能自动跳过。
如果你的需求是找到第一个首列大于0的行,然后读取从该行开始的所有后续行(不管后续行首列是否符合条件),可以用这个代码:
result = [] start_reading = False with open('your_file.txt', 'r') as f: for line in f: # 去掉行首尾的空白字符,跳过空行 cleaned_line = line.strip() if not cleaned_line: continue # 分割行内的字段 parts = cleaned_line.split() try: # 尝试把首列转为数值,判断是否大于0 first_value = float(parts[0]) except ValueError: # 首列不是数值,直接跳过这一行 continue if not start_reading: # 还没开始读取,检查当前行是否符合条件 if first_value > 0: start_reading = True # 把当前行转为数值列表加入结果 result.append([float(item) for item in parts]) else: # 已经开始读取,直接把当前行加入结果 result.append([float(item) for item in parts])
如果你的需求是只读取所有首列大于0的行(不管这些行在文件中的位置),代码可以更简洁:
result = [] with open('your_file.txt', 'r') as f: for line in f: cleaned_line = line.strip() if not cleaned_line: continue parts = cleaned_line.split() try: first_value = float(parts[0]) if first_value > 0: result.append([float(item) for item in parts]) except ValueError: # 跳过首列不是数值的行 continue
方案二:用Numpy处理(适合数值型数据)
如果你习惯用Numpy,也可以先读取所有数据再筛选,不过这个方法适合文件不大的情况(因为要一次性加载所有数据):
import numpy as np # 读取文件,保留所有原始类型 raw_data = np.genfromtxt('your_file.txt', dtype=None, encoding='utf-8') # 筛选出首列是数值且大于0的行 valid_rows = [] for row in raw_data: try: first_val = float(row[0]) if first_val > 0: valid_rows.append(row.tolist()) except (ValueError, TypeError): # 跳过首列无法转为数值的行 continue result = valid_rows
方案三:用Pandas处理(适合结构化数据)
如果你的数据是结构化的,且可以安装第三方库,Pandas会更省心:
import pandas as pd # 读取文件,用空格作为分隔符,不设置表头 df = pd.read_csv('your_file.txt', sep='\s+', header=None) # 把首列转为数值,无法转换的设为NaN df[0] = pd.to_numeric(df[0], errors='coerce') # 筛选首列大于0的行,再转为列表 result = df[df[0] > 0].values.tolist()
以上几种方法都能解决你的问题,其中方案一最通用,不需要额外安装库,完全适配Python 3.5的环境。
内容的提问来源于stack exchange,提问作者tetris
相关产品推荐
相关产品推荐

