Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 13, 2010 00:55:12

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Как превратить кусок кода в текст?

Если переписать этот код на Питоне, он может стать в пару-тройку раз короче и гораздо читабельнее. Хотите попробовать? Окажу посильную помощь.



Отредактировано (Авг. 13, 2010 00:56:25)

Офлайн

#2 Авг. 13, 2010 05:54:37

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10003
Репутация: +  857  -
Профиль   Отправить e-mail  

Как превратить кусок кода в текст?

c = open('/compile.py','w')
/ - это корневой каталог системы, в нём находятся папки bin, sbin, usr, home и так далее
там ничего не создаётся обычно

c = open('/home/guest/someproj/compile.py','w')
и в питоне есть функция перехода в каталог, ею перейти в ‘/home/guest/someproj’ а потом просто сделать

c = open('compile.py','w')
ещё текущий каталог можно указать в виде ./
точка означает текущий каталог, а две точки означают родительский каталог (каталог выше текущего)



Офлайн

#3 Авг. 13, 2010 13:47:18

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2833
Репутация: +  186  -
Профиль   Отправить e-mail  

Как превратить кусок кода в текст?

>можно открыть файл, перейти в нужную вам папку там создать файл и читать из первого файла, а писать в другой.

Может проще копировать заранее подготовленный файл в нужные каталоги?



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#4 Авг. 16, 2010 20:49:10

Alex Ivanov
От:
Зарегистрирован: 2010-08-12
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Как превратить кусок кода в текст?

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

 
import os
import shutil

beginh=0
beginm=0
begink=0
beginrep=0

hr=5 # h
mr=5 # death increment due to foraging
kr=5 # perturbation max and min range difference
seeds=10 #random seed

#it is handy to create string variables with the names of your files, so that you only need to change them in one place in the script

cpp_name = 'JStalin.cpp'
directory_name = 'JStalin'
myprogram = 'JStalin'

for h in range(beginh, beginh+hr):
if h == 0:
d = 200
if h == 1:
d = 400
if h == 2:
d = 600
if h == 3:
d = 800
if h == 4:
d = 1000
for m in range(beginm, beginm+mr):
if m == 0:
df = 0
if m == 1:
df = 0.04
if m == 2:
df = 0.08
if m == 3:
df = 0.12
if m == 4:
df = 0.16
for k in range(begink, begink+kr):
if k == 0:
fp = 2
if k == 1:
fp = 4
if k == 2:
fp = 6
if k == 3:
fp = 8
if k == 4:
fp = 10
for s in range(beginrep, beginrep+seeds):
dirName = directory_name+'_h_'+ str(d) + '_df_' + str(df) + '_fp_' + str(fp) + '_s_' + str(s+1)
#if directory is not there yet, create it
os.mkdir(dirName)

#copy necessary files
shutil.copyfile('random.h',dirName+'/random.h')
shutil.copyfile('SocialColony.h',dirName+'/SocialColony.h')
shutil.copyfile('SocialPopulation.h',dirName+'/SocialPopulation.h')
shutil.copyfile('Individual.h',dirName+'/Individual.h')
shutil.copyfile(cpp_name, dirName + '/' + cpp_name)

#change to the subdirectory
os.chdir(dirName)

#compile within subdirectory, creating the executable within subdirectory
os.popen('g++ -g ' + cpp_name + ' -o ' + myprogram)
#change back to higher directory
os.chdir('../')
#make job description files (handy if they have a keyword that distinguishes them, like 'job')
job_name='job_' + myprogram +'_h_'+ str(d) + '_df_' + str(df) + '_fp_' + str(fp) + '_s_' + str(s+1)
f=open(job_name,'w')
f.write('#PBS -N'+' job_' + myprogram +'_h_'+ str(d) + '_df_' + str(df) + '_fp_' + str(fp) + '_s_' + str(s+1)+'\n')
f.write('#PBS -l walltime=100:00:00\n')
f.write('#PBS -l ncpus=2\n')
f.write('#PBS -j oe\n')
f.write('cd aFoodPerturbation'+ dirName+ '\n')
f.write('./' + myprogram + ' ' + str(d) + ' '+ str(df) + ' ' + str(fp) + ' ' + str(s+1) + '\n')

f.close



Офлайн

#5 Авг. 16, 2010 20:52:05

Alex Ivanov
От:
Зарегистрирован: 2010-08-12
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Как превратить кусок кода в текст?

Хм, странно. Здесь плохо проинтерпретировался код. Все после “for s in range…. ” должно иметь большый отступ, чтобы быть в цикле параметра s.



Отредактировано (Авг. 16, 2010 20:52:50)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version