2015-11-09 50 views
1

這個論壇對像我這樣的蟒蛇新手非常有幫助,以提高我的知識。我從我的CFD模擬中生成了大量文本格式的原始數據。我的目標是將這些文本文件導入python並對它們進行一些後處理。這是我目前的代碼。使用numpy和後期處理導入多個文本文件(大數)

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的初學者,如果有人能幫助我或指引我正確的方向,我將不勝感激。

+1

歡迎來到SO!該代碼是無效的Python;因此可以認爲它還沒有運行過一次;也許你想清除代碼並避免這種印象。 –

+0

歡迎來到StackOverflow。請閱讀並遵守幫助文檔中的發佈準則。 [最小,完整,可驗證的示例](http://stackoverflow.com/help/mcve)適用於此處。在您發佈代碼並準確描述問題之前,我們無法有效幫助您。例如,這裏的後期處理由單個數據文件中的五個圖組成;數據文件之間沒有交互;因此,沒有理由在任何時候有超過一個活動。我們不知道你爲什麼寫出數據。 – Prune

+0

感謝您的回覆。它由來自六個不同文本文件的6個圖組成。對於eq,在'v1-0001.txt'文件中,0001表示與數據關聯的時間步長。所以我希望能夠及時看到因變量的變化。因此,在現在的代碼中,它繪製了六個不同時間步長沿x的溫度變化。請讓我知道我得到這個錯誤的地方。 –

回答

1

您的帖子需要進行編輯才能顯示正確的縮進。

基於快速閱讀,我覺得你是:

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

想必你編輯的目的是糾正一些頭或價值。

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

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,:] = Yith文件,其中YY是預先分配的。如果它們的大小可能不同,最好將它們收集在列表中。

+0

謝謝hpaulj的建議。我已經加入了適當縮進的改進代碼。我請求你做一些澄清。我怎樣才能提供一個示例文件來測試?有沒有辦法上傳SO中的文本文件? 「收集更大的列表或數組中的數據」是什麼意思?你能告訴我一個示例代碼嗎?是這樣的,我正在閱讀所有的文本文件,然後將它們分配給一些數組?如果我的一些問題冗餘或愚蠢,請原諒我。 –