Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用python编写一个可以在单独脚本中调用的方法_Python - Fatal编程技术网

用python编写一个可以在单独脚本中调用的方法

用python编写一个可以在单独脚本中调用的方法,python,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 + timedel

我正在尝试编写一个可以在不同脚本中调用的方法,但是,我无法以我编写的方式成功调用脚本。这是我试图调用的脚本之一(第二个非常类似:

#!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)
c、 wind0是通过script2找到的,而所有其他变量都是通过script1找到的。如果我第二次导入script1,我会得到错误:AttributeError:city实例没有属性“wind1”,它没有与script2相关的属性,它与script1相关联。它似乎忽略了我导入的第一个脚本

如有任何建议,将不胜感激。谢谢

更新:

根据你的建议,再加上一些其他的东西,我想出了这个,它工作得非常完美

#!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)

谢谢大家的帮助!

如果是我,我会将第一个文件中的方法复制并粘贴到您现在使用的文件中,因为据我所知,没有办法从不同的脚本调用方法,不确定,也许有,但对我来说最简单的事情是复制并粘贴该方法。希望我有所帮助……)

将所有内容设置在a类函数下面,该函数返回
城市
,导入该函数并调用它,将
城市
设置为新的局部变量。然后可以运行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)    

在主脚本中,使用变量
c
引用“风”,然后引用“城市”。如果循环结束,变量
c
将引用城市列表中的最后一个城市。因此它没有任何“风”属性

您正在导入
city
,但不是
cities
。好吧,我更改了脚本以同时导入city和cities,但我遇到了另一个问题,我在原始帖子中重申了这一点。所有优秀编程语言的基本能力都是调用外部方法的能力。这就是导入的全部内容:将外部方法包含到内存中,以帮助执行脚本。事实上,每一种编码语言都不过是一个理解自己语言的引擎,以及该语言作者编写的一系列外部方法,这些方法将高级函数(如Python的
lower()
,它将字符串中的所有字母转换为小写)分解为更小的函数,这样您就不必一直自己编写所有代码了。@JWarner112好的,我明白,但我只编写了大约一个月的python,所以我认为这是不可能的,但显然我被证明是错的。。。下次我会记住的,没问题,我的朋友。我们都在学习!我自己一个半月前才开始使用Python,但我已经为此投入了很多时间。此外,这是编程的一个总体概念,而这些概念可能更难掌握。试试codecademypython教程。它的工作并不完美,但你可以编写代码并操作URL来完成这一切:)@JWarner112我每天至少花3个小时,通常是5个或更多时间,我在codecademy中使用了大约44%的python,这是一个很好的网站,目前我正在学习一本名为《python编程绝对初学者》的书,非常好。我建议使用它,因为它教python 3.1.1。还有,我在几年前就开始使用codecade学习java,但几年前我还不懂它,我可能会在以后回到java,我的朋友说他可以教我谢谢!我可以看看。对不起。我是python新手,不知道该怎么做。当我这么做时,它会给我一个下面的错误,行“cities=script1.getCities()”..'NameError:name'script1'没有定义'Oh,我想摆脱script1,只使用getCities()。是的,我不怎么用Python…好的。这就解决了这个问题。然而,我仍然有我在我的原始文章的第2部分相同的错误。我用我在原始帖子中添加的代码调用它:好的,首先,retrieveTemps()返回字符串“c.wind0”。我假设您希望它实际返回self.wind0的值或列表或其他内容。然后,当您在城市中循环时,需要将变量设置为c.retrieveTemps(),否则函数的输出将不起作用。在循环时,您可能希望将c.retrieveTemps()的值附加到列表中。然后可以在打印语句中使用该列表中的值。
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)