Python读取外部文件并按列拆分数据至列表进行运算
嘿,这事儿我常碰到,给你几个实用的实现方案,分不同场景来,你可以按需挑:
方案1:用Python内置
open()+字符串处理(适合小文件、自定义分隔符) 如果你的数据文件是用空格、制表符或者其他自定义符号分隔的小文件,直接用内置的文件读取功能就够了,步骤很清晰:
- 初始化空列表存储每列数据
- 打开文件后逐行读取,跳过表头或空行
- 把每行内容按分隔符拆分,转成数值类型后追加到对应列表
- 最后对列表做你需要的数学运算
代码示例(假设文件是空格分隔的data.txt,第一行是表头):
# 初始化空列表,对应每一列 col1 = [] col2 = [] col3 = [] # 用with语句打开文件,自动处理关闭 with open('data.txt', 'r') as f: # 跳过第一行表头(如果没有表头就删掉这行) next(f) for line in f: # 去掉换行符和首尾空格,按空格拆分(如果是逗号就用split(',')) parts = line.strip().split() # 转成float类型(如果是整数就用int()) num1, num2, num3 = float(parts[0]), float(parts[1]), float(parts[2]) # 追加到对应列表 col1.append(num1) col2.append(num2) col3.append(num3) # 示例数学运算:求每列的平均值 avg_col1 = sum(col1) / len(col1) avg_col2 = sum(col2) / len(col2) avg_col3 = sum(col3) / len(col3) print(f"列1平均值:{avg_col1:.2f},列2平均值:{avg_col2:.2f},列3平均值:{avg_col3:.2f}")
方案2:用
csv模块(适合标准CSV格式文件) 如果你的数据是标准CSV(逗号分隔),或者有带引号的字段、不同分隔符的情况,用Python内置的csv模块更稳妥,能避免很多手动处理的坑:
代码示例(假设文件是data.csv,第一行是表头):
import csv col1 = [] col2 = [] col3 = [] with open('data.csv', 'r', newline='') as csvfile: # 创建CSV读取器,指定分隔符(默认是逗号,按需修改) reader = csv.reader(csvfile, delimiter=',') # 跳过表头 next(reader) for row in reader: # 转数值并追加到列表 col1.append(float(row[0])) col2.append(float(row[1])) col3.append(float(row[2])) # 示例运算:求每列的最大值 max_col1 = max(col1) max_col2 = max(col2) max_col3 = max(col3) print(f"列1最大值:{max_col1},列2最大值:{max_col2},列3最大值:{max_col3}")
方案3:用
numpy(适合大文件、复杂数学运算) 如果你的数据量很大,或者需要做矩阵运算、统计分析(比如标准差、方差、线性代数运算),用numpy会高效很多,它能直接把整个文件读成数组,然后按列快速操作:
代码示例(假设文件是data.txt,第一行是表头):
import numpy as np # 直接读取文件到numpy数组,skiprows=1跳过表头 data = np.loadtxt('data.txt', skiprows=1) # 按列取数据:data[:,0]是第一列,data[:,1]是第二列,以此类推 col1 = data[:, 0] col2 = data[:, 1] col3 = data[:, 2] # 示例运算:求每列的总和与标准差 sum_col1 = np.sum(col1) std_col1 = np.std(col1) print(f"列1总和:{sum_col1:.0f},标准差:{std_col1:.2f}")
几个关键注意点
- 缺失值处理:如果文件里有缺失值,读取时要跳过空行,或者给缺失值设默认值(比如
if len(parts) ==3再处理) - 数值类型:根据你的数据类型选择
int()或float(),避免类型转换错误 - 大文件优化:如果文件特别大,不要一次性读入内存,用逐行读取的方式(方案1、2),或者用numpy的分块读取(
np.genfromtxt配合chunksize参数)
内容的提问来源于stack exchange,提问作者Anom
相关产品推荐
相关产品推荐

