За петлю в Джанго - PullRequest
       10

За петлю в Джанго

0 голосов
/ 28 января 2019

У меня два вопроса.Первый вопрос: скрипт Python, который показывает количество осадков за определенный период. Например, я получаю начальный год-месяц и последний год-месяц. Начальный: Год: 2000 месяц: 3 Окончательный Год1: 2005 месяц: 4 Теперь вместо просмотра: 2000 / 3,2000 / 4,2000 / 5,2000 / 6 .......... 2005 / 1,2005 / 2,2005 / 3,2005 / 4 она работает следующим образом (см. Подключенную картинку): 2000/3, 2000/4, 2001/3,2001/4 ........ 2005 / 3,2005 / 4 .Я хочу работать для меня, как в первом случае.

def period_month_prec(year,month,year1,month1):    
   for i in range (year,year1+1,1):
        for j in range(month,month1+1,1):
             ......................

Второй вопрос: Как записать вывод (изображение) из скрипта в csv.file введите описание изображения здесь

Вот так выглядит мой скрипт views.py, который сохраняет мне только первый результат:

def monthly_period(request):

if request.method == "POST" :
    form = PeriodMonthlyForm(request.POST)
    if form.is_valid():
        data = form.cleaned_data
        year = data.get('year')
        month = data.get('month')
        year1 = data.get('year1')
        month1 = data.get('month1')
        lon = data.get('lon')
        lat = data.get ('lat')
        inter = data.get('inter')

        point = period_month_prec(year,month,year1,month1,lon,lat)
        args = {'point':point}
        response = HttpResponse(content_type='text/txt')
        response['Content-Disposition'] = 'attachment; filename="precipitation.txt"'
        writer = csv.writer(response)
        writer.writerow([point])
        return response

else:

    form = PeriodMonthlyForm()
    active_period_monthly = True

return render (request, 'carpatclimapp/home.html',{'form':form, 'active_period_monthly': active_period_monthly})

1 Ответ

0 голосов
/ 28 января 2019

Хорошо, у меня есть такие формы: Формы

Вы устанавливаете начальные значения (красный цвет) и конечный интервал (синий цвет).Для этого заданного интервала lon и lat определены для точки, в которой мы хотим выполнить интерполяцию.Когда вы нажимаете кнопку отправки, она начинается с интерполяции в течение определенного периода.Проблема цикла заключается в том, что он работает только в течение определенных месяцев (мы видим из 2-й картины, что он работает только в интервале 1-6), но не в течение 7,8,9,10,11,12 месяцев между этими годами.

Начальный : год : 2000, месяц : 3 Окончательный : год1 : 2001, month : 4 для этого она делает это так: 2000 / 3,2000 / 4,2001 / 3,2001 / 4

Я не хочу этого, я хочу этого: 2000 /3,2000 / 4,2000 / 5,2000 / 6,2000 / 7 ..... 2000 / 12,2001 / 1,2001 / 2,2001 / 3,2001 / 4.

этоme code:

def period_month_prec(year,month,year1,month1,lon,lat):

cnx = sqlite3.connect(DB1)
cursor = cnx.cursor()

table = 'monthly'
year = int(year)
year1 = int(year1)
month = int(month)
month1 = int(month1)

for i in range (year,year1+1,1):
    for j in range(month,month1+1,1):

        query = '''
            SELECT  dates, cell, prec FROM %s WHERE dates = "%s-%s" ;
            ''' % (table,i,j)

        df = pd.read_sql_query(query, cnx)

        tacka = '''SELECT id, lon, lat,country,altitude FROM %s;''' % 'grid1'
        grid1 = pd.read_sql_query(tacka, cnx)

        podaci = pd.merge(df,grid1,left_on='cell',right_on='id')
        podaci_a = podaci.drop(['cell','id','country','altitude'],axis=1)
        lon_n = podaci_a['lon'].values
        lat_n = podaci_a['lat'].values
        prec =podaci_a['prec'].values

        x_masked, y_masked, prec_p = remove_nan_observations(lon_n, lat_n, prec)

        xy = np.vstack([x_masked,y_masked]).T
        xi = ([lon,lat])


        inter_point = interpolate_to_points(xy,prec_p,xi, interp_type='linear'

        return (i,j,lon,lat,inter_point)

Полученные результаты выглядят так: цикл с вычислениями

Второй вопрос заключался в том, как сохранить эти результаты (2-е изображение) вCSV-файл, как правильно написать views.py.На данный момент она выглядит так:

def monthly_period(request):

if request.method == "POST" :
    form = PeriodMonthlyForm(request.POST)
    if form.is_valid():
        data = form.cleaned_data
        year = data.get('year')
        month = data.get('month')
        year1 = data.get('year1')
        month1 = data.get('month1')
        lon = data.get('lon')
        lat = data.get ('lat')
        inter = data.get('inter')

        point = period_month_prec(year,month,year1,month1,lon,lat)
        args = {'point':point}
        response = HttpResponse(content_type='text/txt')
        response['Content-Disposition'] = 'attachment; filename="precipitation.txt"'
        writer = csv.writer(response)
        writer.writerow([point])
        return response

else:

    form = PeriodMonthlyForm()
    active_period_monthly = True

return render (request, 'carpatclimapp/home.html',{'form':form, 'active_period_monthly': active_period_monthly})

Надеюсь, теперь я немного яснее

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...