2014-01-15 113 views
5

我正在將數據寫入CSV文件,然後一旦完成,我將該文件複製到另一個目錄。Python在等待操作完成之前完成

這是一個循環,所以當第二次迭代開始時,它從被複制的文件中讀取數據。

問題是在第二次迭代開始時該文件仍在複製,這會導致明顯的問題。

在第二次迭代開始之前,我會如何等待循環中的整個函數完成?它應該能夠繼續進行任何次數的迭代。

for rule in substring_rules: 
    substring(rule) 

功能:

 def substring(rule, remove_rows=[]):   
      writer = csv.writer(open("%s%s" % (DZINE_DIR, f), "wb")) 
      from_column = rule.from_column 
      to_column = rule.to_column 
      reader = csv.reader(open("%s%s" % (OUTPUT_DIR, f))) 
      headers = reader.next() 
      index = 0 
      from_column_index = None 
      for head in headers: 
       if head == from_column: 
        from_column_index = index 
       index += 1 

      if to_column not in headers: 
       headers.append(to_column) 

      writer.writerow(headers) 

      row_index = 0 
      for row in reader: 
       if rule.get_rule_type_display() == "substring": 
        try: 
         string = rule.string.split(",") 
         new_value = string[0] + row[from_column_index] + string[1] 
         if from_column == to_column: 
          row[from_column_index] = new_value 
         else: 
          row.append(new_value) 
        except Exception, e: 
         print e 

       if row_index not in remove_rows: 
        writer.writerow(row) 
       row_index += 1 
      shutil.copyfile("%s%s" % (DZINE_DIR,f), "%s%s" % (OUTPUT_DIR, f)) 
+0

把一個循環下其他的? – yuvi

+0

即時通訊不知道你說什麼?循環是在...中的規則: – Harry

+0

嗯python是一種腳本語言,並將代碼作爲同步線程運行 - 它逐行執行並執行。如果你需要一些操作在另一個之後發生,你可以把它放在下面。目前你正試圖在同一時間做所有事情 – yuvi

回答

0

的問題是,你是不是在複製之前衝廁讀者磁盤上的文件。 (被垃圾收集的文件對象時,這是自動完成的)

,而不是

writer = csv.writer(open("%s%s" % (DZINE_DIR, f), "wb")) 
... 
shutil.copyfile("%s%s" % (DZINE_DIR,f), "%s%s" % (OUTPUT_DIR, f)) 

你應該寫

wf = open("%s%s" % (DZINE_DIR, f), "wb") 
writer = csv.writer(wf) 
... 
wf.close() 
shutil.copyfile("%s%s" % (DZINE_DIR,f), "%s%s" % (OUTPUT_DIR, f))