2013-04-24 2 views
0
import os,random 

def randomizer(input,sample_size,output='NM_controls.xls'): 

#Input file with query 

    query=open(input,'r').read().split('\n') 
    dir,file=os.path.split(input)  
    temp = os.path.join(dir,output)  
    out_file=open(temp,'w') 

    name_list = 833 #### got this from input 

    output_amount = (name_list)/(sample_size) #### = 3.6 but I want the floor value so its fine 

я пишу функцию прямо сейчас, и количество выходов зависит от входного сигнала. поэтому в моей функции он принимает файл, а затем сканирует его и разбивает имена и другие данные.Создайте N количество выходов в зависимости от ввода. Python

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

Есть ли способ использовать модуль «os» для создания определенного количества списков, которые я не указывал в переменных?

в этом случае было бы 3 выхода [ 'output_1.txt', 'output_2.txt', 'output_3.txt']

* * извините за путаницу! поэтому я использую модуль ОС, потому что хочу создать несуществующие файлы в том же каталоге, в котором находился входной файл. это единственный способ, которым я знаю, как это сделать.

+3

его не очень понятно, что вы просите ... –

+0

Что такое «модуль« os »? – abarnert

+0

Также, как правило, «создать несколько Foo», независимо от того, что такое Foo, заключается в создании «списка» или другой коллекции и цикла, в котором вы создаете один Foo и добавляете его в список (или, проще говоря, , используйте общее представление, чтобы сделать все это за один шаг). – abarnert

ответ

0

Если вы хотите написать output_amount файлам (как указано the out_file), то следующее должно работать.

for n in range(output_amount): 
    outfile = open('%s_%d.txt'%(temp, n), 'w') 
    # Now write the data to output file n 

Если вы хотите создать список с n пунктов, см ответ abarnert в.

+0

Ну, он хочет« создать определенное количество списков ", и это не будет делать этого ... но оно будет« создавать определенное количество файлов », и, учитывая, как запутанный вопрос, может быть, это близко-ish ... – abarnert

+0

@abarnert - Да, я предположил, из мало что я понял, что OP тогда обрабатывал каждый элемент списка независимо (поскольку они не показывают, что список создается в любом случае) и сохранение вывода, и в этом случае они могут просто просто перебирать количество файлов, а не создавать в списке – jmetz

+0

это то, что я искал, но я смущен тем, как заставить это работать ... поэтому я хочу писать в out_file1, out_file2 и out_file3 .... поэтому это делает так, что я могу писать в temp_1 и так далее? –

0

Если вы хотите, чтобы «создать определенное количество списков» (где это число не известно до времени выполнения), это легко:

my_lists = [] 
for _ in range(certain_number): 
    my_lists.append(make_another_list()) 

Или еще проще:

my_lists = [make_another_list() for _ in range(certain_number)] 

Или, если у вас динамическое число входных списков, и хотите создать один список выходных данных для каждого, вы даже не нужно рассчитать количество:

my_lists = [transform_a_list(input_list) for input_list in input_lists] 

И, очевидно, здесь нет ничего конкретного. Как вы можете сказать, кроме имени list, который появляется в именах функций make_another_list и transform_a_list, я не использую тот факт, что то, что вы создаете, является определенным списком. Вы можете создать определенное количество строк, чисел, массивов, потоков, файлов, баз данных и т. Д. Таким же образом.

+0

Я считаю справедливым сказать, что мы рассмотрели как генерацию списка, так и n- вывод файла в наших ответах - может быть, ответ - это комбинация двух;) – jmetz

+0

@mutzmatron: Да, это то, к чему я стремился ... или, если не на самом деле являющийся ответом, может быть, между нами мы достаточно писали для OP сказать: «Нет, это не то, что я имел в виду, и это не так, это» (где «это» - это то, что мы можем ответить). – abarnert

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