You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 19:52:31