这个论坛对像我这样的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的初学者。如果有人可以帮助我或指出我正确的方向,我将不胜感激。
答案 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:
语法非常适合确保文件关闭。
您可以在较大的列表或数组中收集已加载的数据。如果所有文件的Y
和temp
大小相同,则可以将它们收集到更大的维度数组中,例如YY[i,:] = Y
文件的ith
,其中YY
已预先分配。如果它们的大小不同,最好将它们收集在列表中。