2013-09-13 2 views
2

Я пытаюсь написать метод, который я могу вызвать в другом скрипте, однако я не могу успешно вызвать скрипты (сценарии) с тем, как я напишите. Это один из сценариев, я пытаюсь позвонить (второй очень похож:Написание метода, который я могу вызвать в отдельном скрипте в python

#!usr/bin/env python 

import re 
import urllib 
from datetime import datetime 
from datetime import timedelta 

date = datetime.now() 
date1 = date + timedelta(days=1) 
date2 = date + timedelta(days=2) 


class city : 
     def __init__(self, city_name, link) : 
       self.name = city_name 
       self.url = link 
       self.wind1 = 0 

    def retrieveTemps(self) : 
      filehandle = urllib.urlopen(self.url) 

      # get lines from result into array 
      lines = filehandle.readlines() 

      # (for each) loop through each line in lines 
      line_number = 0 # a counter for line number 
      for line in lines: 
        line_number = line_number + 1 # increment counter 

        # find string, position otherwise position is -1 

        position2 = line.rfind('<ul class="stats">') 

        #String is found in line 

        if position2 > 0 : 
          self.wind0 = lines[line_number + 1].split('</strong>')[0].split('style="">')[-1] 

          break # done with loop, break out of it 

      return ('c.wind0') 

      filehandle.close() 

m1 = city('Mexico City', 'http://www.accuweather.com/en/mx/mexico-city/242560/daily-weather-forecast/242560?day=2') 
m3 = city('Veracruz', 'http://www.accuweather.com/en/mx/veracruz/236233/daily-weather-forecast/236233?day=2') 
m5 = city('Tampico', 'http://www.accuweather.com/en/mx/tampico/235985/daily-weather-forecast/235985?day=2') 
m7 = city('Nuevo Laredo', 'http://www.accuweather.com/en/mx/nuevo-laredo/235983/daily-weather-forecast/235983?day=2') 
m9 = city('Monterrey', 'http://www.accuweather.com/en/mx/monterrey/244681/daily-weather-forecast/244681?day=2') 
m11 = city('S. Luis Potosi', 'http://www.accuweather.com/en/mx/san-luis-potosi/245369/daily-weather-forecast/245369?day=2') 
m13 = city('Queretaro', 'http://www.accuweather.com/en/mx/queretaro/245027/daily-weather-forecast/245027?day=2') 
m15 = city('Laz. Cardenas', 'http://www.accuweather.com/en/mx/lazaro-cardenas/239054/daily-weather-forecast/239054?day=2') 

cities = [] 
cities.append(m1) 
cities.append(m3) 
cities.append(m5) 
cities.append(m7) 
cities.append(m9) 
cities.append(m11) 
cities.append(m13) 
cities.append(m15) 

Я пытаюсь вызвать этот сценарий и другой сценарий с этим:

#!usr/bin/env python 

from script import getCities 
from script2 import getWind 

cities = getCities() 
wind = getWind() 

for c in wind : 
     c.retrieveTemps() 
for c in cities : 
     c.retrieveTemps() 

print(c.name,c.high0,c.low0,c.high1,c.low1,c.weather0,c.weather1,c.wind0,c.wind1) 

c.wind0 встречается с script2, в то время как все остальные переменные находятся со сценарием 1. Если я импортирую скрипт1 во второй, я получаю ошибку: AttributeError: экземпляр города не имеет атрибута 'wind1', который не имеет атрибута с script2, он связан со сценарием 1. Кажется, игнорировать первый импортируемый сценарий.

Любое предложение s будет оценено. Благодаря!

UPDATE:

Используя свои предложения, плюс что-то еще, я придумал это, и это работает прекрасно.

#!usr/bin/env python 

import script1 
import script2 

wind = script2.getWind() 
cities = script.getCities() 

for c in cities : 
     c.retrieveTemps() 
for w in wind : 
     w.retrieveWind() 

# iterate over both lists in parallel, zip returns a tuple 
for c, w in zip(cities, wind) : 
    print(c.name,c.high0,c.low0,c.high1,c.low1,c.weather0,c.weather1,c.wind0,w.wind1) 

Спасибо всем за помощь!

+5

Вы импортируете 'city', но не' city'. –

+0

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

ответ

1

Сделать все под классом функцией, возвращающей cities, импортировать функцию и вызвать ее, установив cities в новую локальную переменную. Затем вы можете запустить цикл for.

Отказ от ответственности: Я не тестировал это вообще.

Шаг1:

def getCities(): 
    m1 = city('Mexico City', 'http://www.accuweather.com/en/mx/mexico-city/242560/daily-weather-forecast/242560?day=2') 
    m3 = city('Veracruz', 'http://www.accuweather.com/en/mx/veracruz/236233/daily-weather-forecast/236233?day=2') 
    m5 = city('Tampico', 'http://www.accuweather.com/en/mx/tampico/235985/daily-weather-forecast/235985?day=2') 
    m7 = city('Nuevo Laredo', 'http://www.accuweather.com/en/mx/nuevo-laredo/235983/daily-weather-forecast/235983?day=2') 
    m9 = city('Monterrey', 'http://www.accuweather.com/en/mx/monterrey/244681/daily-weather-forecast/244681?day=2') 
    m11 = city('S. Luis Potosi', 'http://www.accuweather.com/en/mx/san-luis-potosi/245369/daily-weather-forecast/245369?day=2') 
    m13 = city('Queretaro', 'http://www.accuweather.com/en/mx/queretaro/245027/daily-weather-forecast/245027?day=2') 
    m15 = city('Laz. Cardenas', 'http://www.accuweather.com/en/mx/lazaro-cardenas/239054/daily-weather-forecast/239054?day=2') 


    cities = [] 
    cities.append(m1) 
    cities.append(m3) 
    cities.append(m5) 
    cities.append(m7) 
    cities.append(m9) 
    cities.append(m11) 
    cities.append(m13) 
    cities.append(m15) 

    return cities 

Шаг 2:

from script1 import getCities 

Шаг 3:

cities = getCities() 

for c in cities : 
    c.retrieveTemps() 
    print(c.name,c.high0,c.low0,c.high1,c.low1,c.weather0,c.weather1,c.wind0,c.wind1)  
+0

Извините. Я новичок в python и не совсем уверен, как я это сделаю. – hunter21188

+0

Когда я это делаю, он дает мне следующую ошибку для строки "cities = script1.getCities()" ... 'NameError: name' script1 'не определен' – hunter21188

+0

О, я думаю, избавиться от скрипта1 и просто использовать getCities(). Да, я не использую Python много ... – Ben

0

Если бы это был я, я бы скопировал и вставлял метод из первого файла в файл, который вы используете прямо сейчас, потому что, насколько я знаю, нет способа вызвать метод из другого скрипт, не уверен, может быть, есть, но самой простой для меня задачей было бы скопировать и вставить этот метод. надеюсь, что я помог ... :)

+0

Фундаментальной способностью всех хороших языков программирования является возможность вызова внешних методов. Вот что такое 'import': включение внешних методов в память, чтобы помочь выполнить скрипт. Каждый язык кодирования на самом деле не более чем движок, который понимает свой собственный язык и ряд внешних методов, написанных автором этого языка, который разбивает расширенные функции (например, «нижний»() Python, который превращает все буквы в строку в в нижнем регистре) на более мелкие функции, так что вам не нужно все время координировать все. – jwarner112

+0

@ JWarner112 нормально, я понимаю, но я только программировал python около месяца, поэтому я подумал, что это невозможно, но, видимо, я оказался ошибочным ...я буду держать это в виду в следующий раз – Infamouslyuseless

+0

Это не проблема, мой друг. Мы все учимся! Я только начал Python полтора месяца назад, но я посвятил этому много времени. Кроме того, это всеобъемлющая концепция программирования в целом, и это может быть еще сложнее понять. Попробуйте учебник Codecademy Python [здесь] (http://www.codecademy.com/tracks/python). Это не работает отлично, но вы можете написать свой код [здесь] (http://labs.codecademy.com) и манипулировать URL-адресами, чтобы пройти через все это :) – jwarner112

1

В вашей основной сценарий вы используете переменную c ссылаться на "ветер", а затем «города». В конце петель переменная c теперь будет ссылаться на последний город из списка городов. Поэтому у него не будет никаких атрибутов «ветра».

+0

Ах. Отлично. Это сработало. Благодаря! – hunter21188

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