使用numpy和Post Processing

时间:2015-11-09 18:29:08

标签: python numpy

这个论坛对像我这样的python新手来说非常有帮助,可以提高我的知识水平。我从CFD模拟中以文本格式生成了大量原始数据。我的目标是将这些文本文件导入python并对它们进行一些后处理。这是我目前的代码。

import numpy as np
from matplotlib import pyplot as plt
import os

filename=np.array(['v1-0520.txt','v1-0878.txt','v1-1592.txt','v1-3020.txt','v1-5878.txt'])

for i in filename:
    format_name= i
    path='E:/Fall2015/Research/CFDSimulations_Fall2015/ddn310/Autoexport/v1'
    data= os.path.join(path,format_name)
    X,Y,U,V,T,Tr = np.loadtxt(data,usecols=(1,2,3,4,5,6),skiprows=1,unpack = True) # Here X and Y represents the X and Y coordinate,U,V,T,Tr represents the Dependent Variables
    plt.figure(1)
    plt.plot(T,Y)
    plt.legend(['vt1a','vtb','vtc','vtd','vte','vtf'])
    plt.grid(b=True)

有没有更好的方法来做到这一点,比如一次将所有文本文件(~10000个文件)导入到python中,然后访问我需要进行后期处理的任何文件(可能是索引)。所有文本文件都具有相同数量的列和行。

我只是Python的初学者。如果有人可以帮助我或指出我正确的方向,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

您的帖子需要进行修改以显示正确的缩进。

基于快速阅读,我认为你是:

reading a file, making a small edit, and write it back
then you load it into a numpy array and plot it

据推测,编辑的目的是纠正某些标题或值。

您不需要将文件写回来。您可以直接在content中使用loadtxt

content = content.replace("nodenumber","#nodenumber") # Ignoring Node number column
data1=np.loadtxt(content.splitlines())
Y=data1[:,2]
temp=data1[:,5]

loadtxt接受任何逐行提供的内容。 content.splitlines()列出了loadtxt可以使用的行列表。

负载可能更紧凑:

Y, temp = np.loadtxt(content.splitlines(), usecols=(2,5), unpack=True)

使用usecols,您甚至可能不需要replace步骤。您尚未向我们提供要测试的示例文件。

我不了解您的多个文件需求。另一种方法是逐个打开和读取每个文件。最好先关闭一个,然后继续下一个。 with open(name) as f:语法非常适合确保文件关闭。

您可以在较大的列表或数组中收集已加载的数据。如果所有文件的Ytemp大小相同,则可以将它们收集到更大的维度数组中,例如YY[i,:] = Y文件的ith,其中YY已预先分配。如果它们的大小不同,最好将它们收集在列表中。