如何在Python中实现Fortran式文本文件数值读取并存储到数组?
在Python中实现类似Fortran读取数值文件的方法
当然有!Python里有好几种方式可以实现和你Fortran代码相同的功能——读取每行20个数值的文本文件,把数值存储到数组里。下面我给你两种常用的方案,分别适合不同的场景:
1. 纯Python内置方法(无需第三方库)
如果不想依赖额外的库,用Python自带的文件操作和数据类型就可以搞定,逻辑和你Fortran的代码很贴近:
# 用来存储所有行的数值数据 acc_data = [] # 用with语句安全打开文件,自动处理关闭操作 with open('your_data_file.txt', 'r') as file: # 逐行读取文件,同时记录行号方便排查错误 for line_num, line in enumerate(file, start=1): # 去除行首尾的空白(包括换行符),然后按空格分割成字符串列表 # split()会自动处理多个连续空格、制表符等分隔符 value_strings = line.strip().split() # 可选:和Fortran的格式检查类似,确保每行正好20个数值 if len(value_strings) != 20: raise ValueError(f"第{line_num}行格式错误:预期20个数值,实际得到{len(value_strings)}个") # 将字符串转成浮点数,存入列表 values = list(map(float, value_strings)) acc_data.append(values) # 如果你需要像Fortran那样把所有数值存成一个一维数组(按行拼接) import itertools acc_flat = list(itertools.chain.from_iterable(acc_data))
这段代码会把每行的20个数值存成一个子列表,最终acc_data是一个1000×20的二维列表;acc_flat则是把所有行连起来的一维列表,和你Fortran中acc数组的存储顺序完全一致。
2. 使用NumPy(更适合数值计算场景)
如果你需要做后续的数值运算,NumPy是最佳选择——它的数组操作和Fortran的数组模型非常契合,而且读取效率更高:
import numpy as np # 直接读取整个文件,自动解析数值,生成二维数组 # loadtxt默认按空格/制表符分割,支持整数、浮点数等数值类型 acc = np.loadtxt('your_data_file.txt') # 可选:验证数组形状是否符合预期(1000行,20列) assert acc.shape == (1000, 20), f"文件格式异常:得到的数组形状是{acc.shape}" # 如果需要转成一维数组(和Fortran中逐行存入的顺序一致) acc_flat = acc.flatten()
额外小提示
- 如果你的文件中有注释行或者空行,可以在
np.loadtxt()里用skiprows参数跳过开头的注释,或者用comments='#'指定注释符号;纯Python版本则可以在循环里加判断:if not line.strip(): continue跳过空行。 - 如果数值是整数,把代码里的
float改成int即可,NumPy的loadtxt也可以通过dtype=int指定类型。
内容的提问来源于stack exchange,提问作者Iman Bazeghi
相关产品推荐
相关产品推荐

