2013-04-29 4 views
2

Мне было интересно, знал ли кто-нибудь, как я могу сменить скрипт на Python, чтобы он проходил через папку, содержащую файлы csv, и записывал их в группы по три. Сценарий работает, когда я ввожу имена файлов в командной строке, но у меня много файлов, так что это займет много времени. Похоже, это сейчас:Python: цикл через несколько файлов csv

resultsdir = "blah" 

#filename1=sys.argv[1] 
#filename2=sys.argv[2] 
#filename3=sys.argv[3] 

file1 = open(resultsdir+"/"+filename1+".csv") 
file2 = open(resultsdir+"/"+filename2+".csv") 
file3 = open(resultsdir+"/"+filename3+".csv") 

Я начинающий, я надеюсь, что я был в состоянии объяснить, что я хочу. Приветствия за любую помощь!

+1

Вы можете уточнить свой вопрос ? Я вижу, что 3 файла открываются, вот и все. Если вы хотите пройти через файл csv и открыть их, почему бы не делать их по одному? Почему три за раз? – tyteen4a03

+0

У меня есть папка со всеми файлами csv и вместо того, чтобы просто взять 3, я хочу использовать скрипт для всех из них. Я не имею в виду цикл через сами файлы csv, и я хочу использовать группы из трех, но не только один раз. –

+0

В папке содержатся только файлы csv? И вы выбираете эти 3 файла произвольно? – Aditya

ответ

7

Вы можете использовать модуль glob (http://docs.python.org/3.3/library/glob.html), чтобы получить все файлы .csv в каталоге и откройте их.

Пример:

import glob 
resultsdir = "blah" 

files = sorted(glob.glob(resultsdir+'/*.csv')) 
while len(files) >= 3: 
    file1 = open(files.pop(0)) 
    file2 = open(files.pop(0)) 
    file3 = open(files.pop(0)) 
    # Do something 
# if the number of files can't be divided by 3 do something 
# with the 1 or 2 files which are left 

Edit: Изменено files.pop() для files.pop(0), чтобы получить файлы от первого до последнего, а не от последнего к первому файлу.

+0

Я уже убедился, что каталог содержит только файлы csv, мне действительно нужно только убедиться, что он берет первые три файла вместе и так далее. Это, наверное, очень просто ... Спасибо за вашу помощь! –

+0

Сортированы ли файлы? Или порядок неважен? – TobiMarg

+0

Они сортируются, первые три идут вместе и так далее. –

1

Если все, что вы хотите, чтобы сгруппировать по трем элементам списка, вот пример кода, который делает это:

import itertools 


def groupby_three(iterable): 
    # x[0] is the index of the scanned element in the input list 
    for _, values in itertools.groupby(enumerate(iterable), 
             lambda x: x[0]/3): 
     yield([y[1] for y in values]) 

# Group by 3 the integers from 10 to 19 
for x in groupby_three(xrange(10, 20)): 
    print x 

Выход:

[10, 11, 12] 
[13, 14, 15] 
[16, 17, 18] 
[19] 
+0

По существу выглядит как работоспособная идея, но не решает проблему прохождения папки, содержащей файлы csv, и принимает их в группы по три. – martineau

Смежные вопросы