0

ファイルをディスクに書き込んでいますが、書き込む前に、QListWidgetからテキスト変数にすべてのアイテムを収集します。各行は「\ n」で区切られていますが、すべての行を取得する代わりに、最後の行のみを取得します。

def makeBatFile(self):
    text=""
    for each in xrange(self.listWidget.count()):
        text="echo [Task Id:%s]\n" % each
        text=text+ self.listWidget.item(each).text() +"\n"
        print text
    self.writeBatFile("batch",text)

forループ内のprintはすべての行を出力しますが、すべてのリストアイテムを書き込みたいときに、リスト内のアイテム数をファイルに書き込もうとするため、forループ内からwriteBatfileメソッドを呼び出すことはできません。 1つのファイルで...

def writeBatFile(self,do="single",task=None):
    self.task=task
    now = datetime.datetime.now()

    buildCrntTime=str(now.hour) +"_" + str(now.minute)
    selected=str(self.scnFilePath.text())
    quikBatNam=os.path.basename(selected).split(".")[0]+"_"+buildCrntTime+".bat"
    if do !="batch":
        self.batfiletoSave=os.path.join(os.path.split(selected)[0],quikBatNam)
        self.task = str(self.makeBatTask())
    else:
        self.batfiletoSave=os.path.join(self.batsDir,buildCrntTime+".bat")
    try:
        writeBat=open(self.batfiletoSave,'w')
        writeBat.write(self.task)
        self.execRender()
    except: pass
    finally: writeBat.close()

writeBatFileメソッドに渡されるコンテンツをビルドしているときに何が間違っていますか?

4

3 に答える 3

1

text再定義する各反復text=で、前のループ反復の値が参照されなくなるためtext、ループの最後の反復のの値のみがに渡されます。writeBatFile

1つの解決策は、でリストを作成し、各反復でリストに変数をmakeBatFile追加することです。text次に、これをwriteBatFileファイルに渡して、ファイルに書き込むことができます。.writelines

于 2012-12-11T18:47:39.757 に答える
0

バグがあります:各ループであなたはします

text="echo [Task Id:%s]\n" % each

textこれは、前の反復で保持されていたものをすべてダンプします。代わりに、

text += "echo [Task Id:%s]\n" % each
于 2012-12-11T18:49:17.433 に答える
0

forループの各ループでテキスト変数を上書きしています。各行をテキスト変数に追加する必要があります。

def makeBatFile(self):
    text=""
    for each in xrange(self.listWidget.count()):
        text += "echo [Task Id:%s]\n" % each
        text += self.listWidget.item(each).text() +"\n"
        print text
    self.writeBatFile("batch",text)

+=演算子は次のショートカットです。

text = text + othertext

このようにして、変数を新しい文字列に再割り当てする代わりに、ループの各反復で文字列をテキスト変数に追加します。

于 2012-12-11T18:50:02.787 に答える