12

Python では、Web サイト上の (フォルダーへの) 最新のリンクのリストを返す関数があります。それらのフォルダーから最新のファイルをダウンロードする別の機能もあります。このスクリプトを毎日実行する予定です。ダウンロード機能が最新のフォルダーに対して実行されるたびにアクセスするフォルダー リンクを含むグローバル リストがあります。そのグローバル リストを 5 日ごとに更新し、次の 5 日間は静的に保ち、再び更新されるまでコードを実行します。

次のようなものです。

list = ["link1", "link2",...]

def update():
  #code to update list
  return list

def download(list):
  #code to download from links

したがって、更新機能を5日ごとに実行し(その方法を知っています)、ダウンロード機能を毎日実行したいと考えています。では、 update() から返されたリストを、再度更新されるまでグローバルリストとして静的に保つにはどうすればよいですか?

編集:明確にしてみましょう:

私は月曜日にこれを実行します:

list = ["link1", "link2"]

def update():
  #code to update list
  return list #--> list = ["link1", "link2", "link3"]

def download(list):
  #code to download from links

これは正常に機能し、リストが更新され、download() で使用されました。

私は火曜日にこれを実行します:

list = ["link1", "link2"]
#update() won't run today, only runs every 5 days
def update():
  #code to update list
  return list #--> list = ["link1", "link2", "link3"]

def download(list):
  #code to download from links

コードを再起動しましたが、月曜日からリストに link3 がありません。リストを再度更新するまで、次の 5 日間、link3 をリストに保持するにはどうすればよいですか?

ありがとう

4

3 に答える 3

17

globalステートメントを使用します。ただしglobal、その場で変更する場合は、変更可能なオブジェクトは必要ありません。

pickleリストをファイルに保存するようなモジュールを使用できます。使用するときにリストをロードし、変更を行った後に保存できます。

lis = ["link1", "link2",...]

def update():
  global lis
  #do something
  return lis

ピクルスの例:

import pickle
def update():
  lis = pickle.load( open( "lis.pkl", "rb" ) ) # Load the list
  #do something with lis                     #modify it 
  pickle.dump( lis, open( "lis.pkl", "wb" ) )  #save it again

パフォーマンスを向上させるために、cPickleモジュールを使用することもできます。

その他の例

于 2013-06-25T21:05:35.440 に答える
2

変数の通常の宣言はローカルになります。
global キーワードを使用して、グローバルとしてレンダリングします。

リストをファイルに書き込んでアクセスし、後でそこから読み取るだけです。

コードを自分で実行したくない場合は、cron-job を使用して実行できます。

def read_file(filename):
    f = open(filename).read().split()
    lis = []
    for i in f:
            lis.append(i)
    return lis 

def write_file(filename,lis):
        f = open(filename,"w")
        for i in lis:
                f.write(str(i)+'\n')
于 2013-06-25T21:14:29.240 に答える