2013-08-18 2 views
0

В каталоге, который я скажу, 30 файлов txt, каждый из которых содержит два столбца чисел с примерно 6000 номерами в каждом столбце. Я хочу, чтобы импортировать первые 3 файла txt, обрабатывать данные, которые дают мне желаемый результат, а затем я хочу перейти на следующие 3 текстовых файла.Python - импортировать txt в последовательном шаблоне

каталог выглядит следующим образом:

file0a

file0b

file0c

file1a

file1b

file1c ... и так далее.

Я не хочу импортировать все файлы файлов txt одновременно, я хочу импортировать первые 3, обрабатывать данные, затем следующие 3 и так далее. Я думал о создании словаря, хотя я чувствую, что это может включать в себя запись каждого имени файла в словаре, что слишком долгое время.

EDIT:

Для тех, кто заинтересован, я думаю, что я пришел с работы вокруг. Любая обратная связь будет очень признательна, так как я не уверен, что это самый быстрый способ сделать что-то или самое пифоническое.

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» все текстовые файлы из каталога, и «Data_raw_all» использует функцию «ломти» сгруппировать элементы в «Data» в наборы 3. Таким образом, вы можете выбор одного элемента в Data_raw_all выбирает соответствующие 3 текстовых файла в каталоге.

+0

Вы не сможете открыть файлы без имен файлов. Действительно ли они называются file1a и т. Д. Или являются ли эти заполнители? – rlms

+0

Имена файлов называются UVF2CNa1ai, UVF2CNa1aj и UVF2CNa1ak. Однако для верности я назвал их file1a и так далее. Предполагая, что они называются file1a и т. Д. - можно ли это сделать? – Holtz

+0

Итак, имена файлов сгруппированы по тем же первым 8 символам, а затем разделены группами, заканчиваясь на i, j и k? – rlms

ответ

1

Прежде всего, у меня нет ничего оригинального, чтобы включить здесь, и я определенно не хочу утверждать, кредит на это вообще, потому что все это происходит от Python Cookbook 3 Ed и от этого wonderful presentation on generators Дэвид Бизли (один из соавторы вышеупомянутой статьи Поваренная книга). Однако, я думаю, вы могли бы извлечь выгоду из примеров, приведенных в слайд-шоу на генераторах.

Что Бизли является цепь пучок образующих вместе, чтобы сделать следующее:

  1. дает имена файлов, соответствующих заданному шаблону имен файлов.
  2. дает открытые файловые объекты из последовательности имен файлов.
  3. Сцепляет последовательность генераторов в одну последовательность
  4. отбирает ряд линий для тех, кто соответствует шаблону регулярного выражения

Все эти примеры кода расположены 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