Найти - Пользователи
Полная версия: Как превратить кусок кода в текст?
Начало » Python для новичков » Как превратить кусок кода в текст?
1 2
Ed
Если переписать этот код на Питоне, он может стать в пару-тройку раз короче и гораздо читабельнее. Хотите попробовать? Окажу посильную помощь.
py.user.next
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')
ещё текущий каталог можно указать в виде ./
точка означает текущий каталог, а две точки означают родительский каталог (каталог выше текущего)
Rodegast
>можно открыть файл, перейти в нужную вам папку там создать файл и читать из первого файла, а писать в другой.

Может проще копировать заранее подготовленный файл в нужные каталоги?
Alex Ivanov
Сделал! Спасибо всем! Если кому-то интересно, задача была следующая. Мне нужно было запустить тысячи версий одной модели с разными параметрами. Для этого нужно было создать множество папок куда я записыю выходные файлы. И нужно было создать много файлов, которые запускают программы на кластере. Вот код реализации:
 
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
Alex Ivanov
Хм, странно. Здесь плохо проинтерпретировался код. Все после “for s in range…. ” должно иметь большый отступ, чтобы быть в цикле параметра s.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB