2013-08-18 38 views
0

在我說的目錄中,每個列中包含兩列數字(每列大約有6000個數字)的30個txt文件。我想要做的是導入前3個txt文件,處理數據給我所需的輸出,然後我想移動到下一個3 txt文件。Python - 按順序模式導入txt

目錄的樣子:

file0a

file0b

file0c

file1a

file1b

file1c ...等等。

我不想同時導入全部的txt文件,我想導入前3個,處理數據,然後是下3個等等。我正在考慮製作字典 - 儘管我有一種感覺,這可能涉及在字典中編寫每個文件名,這需要太長的時間。

編輯:

對於那些有興趣,我想我已經想出了一個解決辦法。任何反饋都會被大大的讚賞,因爲我不確定這是否是最快捷的方式來做事情或最pythonic。

import glob 

def chunks(l,n): 
    for i in xrange(0,len(l),n): 
    yield l[i:i+n] 


    Data = [] 

    txt_files = glob.iglob("./*.txt") 

    for data in txt_files: 
    d = np.loadtxt(data, dtype = np.float64) 
    Data.append(d) 

    Data_raw_all = list(chunks(Data,3)) 

下面列表中「數據」是所有從目錄中的文本文件,以及「Data_raw_all」使用功能「塊」到組「數據」的元素融入套3.這種方式可以在Data_raw_all中選擇一個元素將選擇目錄中對應的3個文本文件。

+0

您將無法打開該文件,而文件名。他們實際上是命名爲file1a等還是那些佔位符? – rlms

+0

文件名稱分別稱爲UVF2CNa1ai,UVF2CNa1aj和UVF2CNa1ak。然而,爲了berevity,我叫他們file1a等。假設他們被稱爲file1a等 - 可以這樣做? – Holtz

+0

文件名也是按照前8個字符分組,然後再以i,j和k結尾分組。 – rlms

回答

1

首先,我沒有什麼原創,包括在這裏,我絕對不想邀功它,因爲在所有這一切來自於Python的食譜第三版從這個wonderful presentation on generators由大衛比茲利(之一前述的Cookbook的共同作者)。不過,我想你可能真的從發電機幻燈片中給出的例子中受益。

比茲利做什麼是連鎖一堆發電機在一起,以便做到以下幾點:

  1. 產生的文件名匹配給定文件名模式。
  2. 從一系列文件名中產生打開的文件對象。
  3. 符連接發電機的序列成單個序列
  4. 裏grep那些匹配正則表達式模式

所有這些代碼示例位於here,一系列線。這種方法的優點在於,鏈式發生器簡單地啃起next條信息:它們不會將全部文件加載到存儲器中,以便處理全部的數據。這真是一個很好的解決方案。無論如何,如果你通過幻燈片閱讀,我相信它會給你一個你想要做什麼的藍圖:你只需要改變它的信息,你正在尋找的信息。

簡而言之,請查看上面鏈接的幻燈片並遵循,它應該提供解決問題的藍圖。

1

我假設你想硬編碼儘可能少的文件名。因此,大部分代碼都用於生成文件名。然後用with聲明打開文件。

示例代碼:

from itertools import cycle, count 

root = "UVF2CNa" 

for n in count(1): 
    for char in cycle("abc"): 
     first_part = "{}{}{}".format(root, n, char) 
     try: 
      with open(first_part + "i") as i,\ 
       open(first_part + "j") as j,\ 
       open(first_part + "k") as k: 
       # do stuff with files i, j and k here 
       pass 
     except FileNotFoundError: 
      # deal with this however 
      pass