2016-06-10 13 views
1

angezeigt werden. Ich hatte einige Werte generiert und sie in eine Tabelle mit xlsxwriter eingefügt. Dies ist, wie ich es tat:Die erstellte .xlsx-Datei konnte nicht im Verzeichnis

class main1(): 
    . 
    . 
    . 
    . 
    def fun1(): 
     workbook = xlsxwriter.Workbook(self.Output_fold+'Test'+time.strftime("%H_%M_%S_%d_%m_%Y")+'.xlsx') 
     worksheet_A = workbook.add_worksheet('Sheet_A') 
     . 
     . 
     worksheet_A.write(row,col,<val>) 
     . 
     . 
     workbook.close() 

Jetzt, da ich mehrere Schreibvorgänge machen musste, und fügte hinzu, komplexere Logik, entschied ich mich eine andere Funktion fun2 eingeführt zu haben, die die Werte entsprechend schreiben würde. Die neue Logik erfordert die Generierung von Werten in fun1 sowie fun2 (durch Aufruf einer anderen Funktion fun3). So entschied ich mich, Variablen workbook usw. mit self.workbook und ebenso zu ersetzen. Meine modifizierte Skript sieht wie folgt aus:

main_file.py

import xlsxwriter 
import libex 
import os 
import time 
import sys 
import string 

class main_cls(): 
    def __init__(self): 
     self.i=0 
     self.t1="" 
     self.t2="" 
     pwd=os.getcwd().split('\\') 
     base='\\'.join(pwd[0:len(pwd)-1])+'\\' 
     print base 
     self.Output_fold=base+"Output\\" 
     self.Input_fold=base+"Input\\" 
     self.workbook=xlsxwriter.Workbook(self.Output_fold+'Test_'+time.strftime("%H_%M_%S_%d_%m_%Y")+'.xlsx') 
     self.worksheet_A = self.workbook.add_worksheet('Sheet_A') 
     self.worksheet_A.write(self.i,self.i,"Text 1") 
     self.worksheet_A.write(self.i,self.i+1,"Text 2") 
     self.i+=1 
    def fun1(self): 
     self.t1="1" 
     self.t2="2" 
     self.worksheet_A.write(self.i,self.i,self.t1) 
     self.worksheet_A.write(self.i,self.i+1,self.t2) 
     self.i+=1 
     self.eg=libex.exlib() 
     self.t1=self.eg.gen(0) 
     self.t2=self.eg.gen(0) 
     self.fun2() 
     self.workbook.close() 
    def fun2(self): 
     if option==1: 
      self.fun3() 
    def fun3(self): 
     self.t1=self.eg.gen(0) 
     self.t2=self.eg.gen(1) 
     self.worksheet_A.write(self.i,self.i,self.t1) 
     self.worksheet_A.write(self.i,self.i+1,self.t2) 
     self.i+=1 

option=int(sys.argv[1]) 
if len(sys.argv)==2: 
    p=main_cls() 
    if option==1: 
     p.fun1() 
    else: 
     pass 
else: 
    print "Wrong command" 

libex.py

class exlib(): 
    def __init__(self): 
     self.a="duh" 
    def gen(self,x): 
     if int(x)==0: 
      return(self.a) 
     elif int(x)==1: 
      self.a=str(self.a+" "+self.a+" "+self.a+" !!!") 
      return(self.a) 

Nun, dies in diesem speziellen Fall funktioniert, aber in den eigentlichen Code, es nicht. Die Datei selbst wird nicht im Ausgabeverzeichnis erstellt. Dann fügte ich folgende Zeile hinzu:

print "Workbook created at path : ",self.workbook.filename 

um zu sehen, ob die Datei erstellt wird und es überraschenderweise zeigte mit voller Pfad !!!

Wo könnte ich hier falsch liegen und wie kann ich das beheben?

UPDATE1: Ich spielte ein wenig herum mit ihm und fand, dass self von self.workbook Entfernung bewegt workbook-__init__(self) bevölkerten die Datei mit den Anfangswerten erstellt.

UPDATE2: Habe meinen Code wie vorgeschlagen minimal repliziert. Und das funktioniert ganz gut !!!

+0

Es sieht so aus, als ob Sie die Datei in 'fun1()' öffnen und schließen, damit sie nicht in 'fun2() '' schreibt – jmcnamara

+0

@jmcnamara Macht 'self' es nicht" globaler "? Ich meine genau wie andere Variablen? Bevor ich aus 'fun2()' in das Excel schreibe, schreibe ich noch ein paar Werte aus 'fun1()'. Also, sollte es in diesem Fall nicht zumindest diese Werte zeigen? –

+0

Ich komme hauptsächlich zu der Tatsache, dass die Arbeitsmappe in 'fun1()' geschlossen ist, so dass der Aufruf von 'write()' in 'fun2()' keinen Effekt hat (außer 'fun2()' wird aufgerufen von 'fun1()'. Allerdings ist es schwer zu beurteilen, ohne das vollständige Programm zu sehen.Allgemein denke ich, Sie könnten sich selbst und uns retten :-), einige Zeit, indem Sie ein kleines, aber vollständiges Programm hinzufügen. – jmcnamara

Antwort

2

Versucht zu reproduzieren, Datei wird gerade gut erstellt, vielleicht haben Sie ein Problem mit der self.Output_fold-Variable oder mit Dateiberechtigungen oder mit dem Datei-Explorer Ihres Code-Editors.

+0

Ich bin mir sicher "selbst.Output_fold' ist in Ordnung (drucke den Pfad, um dasselbe zu prüfen). Die anderen zwei Datei-Berechtigungen und Code-Editor (ich benutze Pyscripter) Datei-Explorer, scheinen auch kein Problem zu sein, denn wenn ich von Grund auf neu zu starten und versuchen, mit einem minimalen Code zu reproduzieren, läuft es eigentlich genau so du sagtest. Kann nicht herausfinden, was ich falsch mache. –