2016-12-01 29 views
0

var 1不斷地隨着寫在csv文件中的每條新行而變化。任何建議如何獲得函數外的值。這個例子對我不起作用。 我更新了我的代碼,並添加了第二個功能,它完全相同,但正在讀取另一個文件。現在我只從第一個功能打印。如果我禁用第一個功能,我可以從第二個功能獲得打印。如果我添加更新的新功能,是否可以打印兩個或三個或四個?來自Python中函數的動態變量

import sys 
import time 
import datetime 
import os 


class Application(): 

    def loop_one(self): 

     filename = 'Test.csv' 
     mycsv = open(filename, 'r') 
     mycsv.seek(0, os.SEEK_END) 

     while 1: 
      time.sleep(1) 
      where = mycsv.tell() 
      line = mycsv.readline() 

     if not line: 
      mycsv.seek(where) 

     else: 
      arr_line = line.split(',') 
      var1 = arr_line[5] 
      mydate = datetime.datetime.now() 
      print var1, mydate.strftime("%H:%M:%S:%f") 
      return var1 

    def loop_two(self): 

     filename2 = 'Test2.csv' 
     mycsv2 = open(filename2, 'r') 
     mycsv2.seek(0, os.SEEK_END) 

     while 1: 
      time2.sleep(1) 
      where2 = mycsv2.tell() 
      line2 = mycsv2.readline() 

     if not line2: 
      mycsv2.seek(where2) 

     else: 
      arr_line2 = line2.split(',') 
      var2 = arr_line2[5] 
      mydate2 = datetime.datetime.now() 
      print var2, mydate.strftime("%H:%M:%S:%f") 
      return var2 

s = Application() 
var1 = s.loop_one() 
var2 = s.loop_two() 
+1

您是否嘗試過保存參考? 'var1 = s.loop_one()' – TigerhawkT3

+0

我試過var1 = s.loop_one()然後打印var1但沒有任何東西 – manev

+0

你確定你的縮進是正確的嗎?你的'if'和'else'語句應該在'while'循環中嗎? –

回答

1

可以聲明一個變量初始化功能裏面,所以你可以使用任何地方

class A(object): 
    def __init__(self): 
     self.x = 'Hello' 

    def method_a(self, foo): 
     print self.x + ' ' + foo 

在你的情況,你可以做一些事情像這樣(未測試)

class Application(): 

    def __init__(self): 

     self.filename = 'Test.csv' 
     self.mycsv = open(self.filename, 'r') 
     self.mycsv.seek(0, os.SEEK_END) 
     self.var1 = '' 

    def loop_one(self): 
     while 1: 
      time.sleep(1) 
      where = self.mycsv.tell() 
      line = self.mycsv.readline() 

      if not line: 
       self.mycsv.seek(where) 
       # you need a break here or somewhere :D 

      else: 
       arr_line = line.split(',') 
       self.var1 = arr_line[5] 
       mydate = datetime.datetime.now() 
       print self.var1, mydate.strftime("%H:%M:%S:%f") 
       return self.var1 

s = Application() 
s.loop_one() 
0

您已將if if塊移到for循環中,否則您的代碼將陷入無限循環。

import sys 
import time 
import datetime 
import os 

class Application(): 

    def loop_one(self): 

     filename = 'Test.csv' 
     mycsv = open(filename, 'r') 
     mycsv.seek(0, os.SEEK_END) 

     while 1: 
      time.sleep(1) 
      where = mycsv.tell() 
      line = mycsv.readline() 

      if not line: 
       mycsv.seek(where) 

      else: 
       arr_line = line.split(',') 
       var1 = arr_line[5] 
       mydate = datetime.datetime.now() 
       print var1, mydate.strftime("%H:%M:%S:%f") 
       return var1 

s = Application() 
s.loop_one() 
0

訪問var1功能外

class Application: 
    var1 = None 

    def loop_one(self): 
     # Code 
     while True: 
      # Your code 
      if not line: 
       # Code 
      else: 
       global var1 
       # Code 
       var1 = arr_line[5] 

    # Then you can access it via 
    def show(): 
     print(var1)