如何使用python语言从文件中提取特定数据

时间:2017-09-07 21:57:36

标签: python filter extract

我如何编写一个python程序来提取日期,石油,天然气和水的累积生产数据及其各自的值来自包含数据集的文本文件,如下所示。感谢

时间:3622天X P T S E C T O R S U M M A R Y DATE:2025:12:01

                                                     Reservoir                                                        

=============================================== ================================================== ==================================

                           SECTOR-1   SECTOR-2   SECTOR-3                                                                       
                           MATRIX     FRACTURE   FIELD                                                                          

批量交易量    总批量。 M rft3 2.42995E + 7 2.43E + 7 4.85995E + 7
 毛孔体积    总毛孔体积。 M rft3 3.22463E + 6 485.86 3.22511E + 6
   HC。孔容M rft3 2.57897E + 6 388.56 2.57935E + 6
 最初就位    储罐油M STB 0 0 0
   吸附气体MM SCF 2.41498E + 5 0 2.41498E + 5
   气体表面MM SCF 7.51141E + 5 76.792 7.51218E + 5
   表面M的水STB 1.15937E + 5 17.469 1.15954E + 5
 目前就位    储罐油M STB 0 0 0
   吸附气体MM SCF 2.37806E + 5 0 2.37806E + 5
   表面气体SCF 7.01409E + 5 69.061 7.01478E + 5
   表面M的水STB 1.15937E + 5 17.469 1.15954E + 5
   吸附气体:组件化    CH4 MM摩尔数2.84948E + 5 0 2.84948E + 5
   储油M rbbl 0 0 0
   无储层气体M rft3 2.57897E + 6 388.56 2.57935E + 6
   储层水M rbbl 1.14997E + 5 17.329 1.15014E + 5
   Cum Water Influx M STB 0 0 0
 平均压力    总PV大道psia 2739.7 2707.6 2739.7
   HC PV Ave. psia 2739.7 2707.7 2739.7
   PV大道Datum P psia 2739.7 2707.6 2739.7
   HC PV Ave. Datum P psia 2739.7 2707.7 2739.7
 平均温度    Bulk Vol Ave. degF 150 150 150
 大道饱和度    油0 0 0
   气体0.79977 0.79975 0.79977
   水0.20023 0.20025 0.20023
 恢复百分比    库存油箱100 100 100
   表面气体6.6221 0 6.6214
   水2.35982E-5 0 2.35946E-5
 累积注射    溶剂MM SCF 0 0 0
   水M STB 0 0 0
 累计生产    油M STB 0 0 0
   气体MM SCF 49741 0 49741
   水M STB 2.7359E-2 0 2.7359E-2
   湿气MM SCF 49866 0 49866
 注射率    气体MM SCF /天0 0 0

   水M STB /天0 0 0
 生产率    油M STB /天0 0 0

   气体MM SCF /天12.652 0 12.652
   水M STB /天1.13795E-6 0 1.13795E-6
   湿气MM SCF /天12.684 0 12.684

1 个答案:

答案 0 :(得分:1)

你的问题很广泛。你有编写的代码吗?或者,你刚刚开始编程吗?

无论如何要帮助你:

with open('filname.txt') as f:
    handle = f.readlines()
    for line in handle:
        # read the header
        if end_of_header:
            break
     there_are_more_lines = True  
     while there_are_more_lines:
        try:
            line = next(handle)
            # parse the line
        except StopIteration:
            there_are_more_lines = False

因为我不了解你的背景,所以我很快解释一下。我正在使用'打开文件。现在我可以用函数readlines()逐行读取文件。我把这个函数的输出放在' handle'中。现在这是一个我可以迭代的迭代器 现在要查看文本文件的两个部分。首先是标题。你应该解析标题并找到一些可以告诉标题何时停止的条件 第二个身体。在我的例子中,我读取所有行并捕获StopIteration(文件结束)以打破while循环。你应该找到解析每一行的东西 有用的其他功能:string.split() string.startwith('something')

如果您真的对python不熟悉,这可能不是最好的帮助,tutorialspoint或其他可能是开始收集知识来解决问题的更好的地方。

祝你好运。

编辑: 要获取并解析您可以使用的每行的最后三个数字:

list(map(float, line.split()[-3:])

这行代码首先根据空格分割()行。然后取最后三个单词',数字,并使用一个映射将它们全部放入float函数。 float函数将它们全部转换为数字(浮点函数理解文件中使用的科学记数法)。 map函数将float函数应用于我的split创建的列表中的每个项目。 map函数返回迭代器类型。如果您现在不知道如何使用迭代器,您可以直接将其转换回列表。