2017-05-26 112 views
0

我正在嘗試編寫一個簡單的腳本,該腳本將通過+1遞增文件內部的文本,然後在將文件名增加+1時保存該文件。如何使用pywinauto使用遞增名稱保存多個文件

所以基本上:

這是文本1

保存爲:FILE1.TXT

這是文本2

保存爲:FILE2.TXT

等等。我已經得到了我的腳本來做到這一點與記事本程序,但我無法找出一種方法來做到這一點,而不必打開每個文件的記事本。 我已經嘗試連接到進程ID和類似的東西,但我只有大約一個月的時間進行編程,所以我在這個概念上有一段可怕的時間。

#!/usr/bin/env python 

from pywinauto.application import Application 
b = int(raw_input("Where do you want to start? >")) 
a = int(raw_input("How Many Labels do you need? >")) 

def make_labels(a, b): 

    app = Application().start("notepad.exe") 
    app.UntitledNotepad.edit1.SetText("This is me typing %r" % b) 
    app.UntitledNotepad.MenuSelect("File -> SaveAs") 
    #app.SaveAs.ComboBox5.Select("UTF-8") 
    app.SaveAs.edit1.SetText("Test_File%r.txt" % b) 
    app.SaveAs.Save.Click() 
    app.UntitledNotepad.TypeKeys("%FX") 
    b = b + 1 
    return b 



while b < a: 
    b = make_labels(a, b) 

任何幫助都搞清楚如何得到這個只使用記事本的一個實例,將不勝感激工作。

更新:

好吧,我想我已經取得了一些進展。我不知道你可以通過程序名稱來識別它,所以我改變了它,現在它使用相同的窗口。但是我的新問題是,它會得到它通過+1第二次增加的內容點但是它將無法打開之後保存選項:

#!/usr/bin/env python 

from pywinauto.application import Application 
import time 

b = int(raw_input("Where do you want to start? >")) 
a = int(raw_input("How Many Labels do you need? >")) 
app = Application().start("notepad.exe") 

def make_labels(b, app): 

    #app = Application().start("notepad.exe") 
    app.Notepad.edit1.SetText("This is me typing %r" % b) 
    app.Notepad.MenuSelect("File -> SaveAs") 
    app.SaveAs.edit1.SetText("Test_File%r.txt" % b) 
    app.SaveAs.Save.Click() 

    #app.Notepad.TypeKeys("%FX") 
    b = b + 1 
    return b 



while b < a: 
    b = make_labels(b, app) 
+0

如果您問「如何從文件中讀取數據,然後用新名稱創建一個文件並在其中寫入信息?」,[讀寫文件](https://docs.python。組織/ 2 /教程/輸入 - 輸出。html#讀寫文件),[用Python讀寫文件](http://www.pythonforbeginners.com/files/reading-and-writing-files-in-python),[Python文件I/O](https://www.tutorialspoint.com/python/python_files_io.htm) – Kevin

+0

不,我已經得到了(主要)我只是需要稍微改變文本(通過增加在句子結尾的數字+1),然後對保存文件的標題執行相同操作。我已經得到了這些部分,並且腳本對此起作用,但是現在它每次更改時都會打開一個記事本的新實例。我希望它使用同一個記事本實例,但不知道如何讓它連接到該實例,因爲實例名稱更改爲保存文件的名稱。 – Elka

回答

0

好吧!

所以我想出瞭解決我的問題的替代方法。而不是使用菜單中選擇選項,如果一個人在用他們的鼠標點擊的我,而不是嘗試過的所有鍵盤快捷方式,它的工作:

#!/usr/bin/env python 

from pywinauto.application import Application 
import time 

b = int(raw_input("Where do you want to start? >")) 
a = int(raw_input("How Many Labels do you need? >")) 
app = Application().start("notepad.exe") 

def make_labels(b, app): 

    #app = Application().start("notepad.exe") 
    app.Notepad.edit1.SetText("This is me typing %r" % b) 
    app.Notepad.TypeKeys("^S") 
    app.SaveAs.edit1.SetText("Test_File%r.txt" % b) 
    app.SaveAs.Save.Click() 

    #app.Notepad.TypeKeys("%FX") 
    b = b + 1 
    return b 



while b < a: 
    b = make_labels(b, app) 
    app.Notepad.TypeKeys("^N") 

它使用鍵盤輸入,保存文件,然後打開一個新的文件(在相同的應用程序實例下)並重復該過程。

我希望這可以有助於未來的其他人。

0

寫兩次行

app.SaveAs.Save.Click() 

似乎解決了問題

#!/usr/bin/env python 

from pywinauto.application import Application 
b = int(raw_input("Where do you want to start? >")) 
a = int(raw_input("How Many Labels do you need? >")) 

def make_labels(a, b): 

    app = Application().start("notepad.exe") 
    app.UntitledNotepad.edit1.SetText("This is me typing %r" % b) 
    app.UntitledNotepad.MenuSelect("File -> SaveAs") 
    #app.SaveAs.ComboBox5.Select("UTF-8") 
    app.SaveAs.edit1.SetText("Test_File%r.txt" % b) 
    app.SaveAs.Save.Click() 
    app.SaveAs.Save.Click() 
    app.UntitledNotepad.TypeKeys("%FX") 
    b = b + 1 
    return b 

while b < a: 
    b = make_labels(a, b) 

然後在你的函數make_labels參數「A」是沒用的。

+0

是的,我剛剛注意到a在函數中也是無用的。那是一個被我忽略的殘餘物,試圖找出第一點,但感謝你指出了它。我已經過了識別腳本部分工作的窗口,但是我似乎遇到了一個新問題,我在原始文章的更新中詳細介紹了這些問題。 – Elka

0

我不確定你是否真的想要記事本窗口出現,或者如果你只是想用任何作品編寫文件,而且這是你發現的第一種方法。如果是後者,則不需要pywinauto來保存多個文件。 openwrite將工作得很好。

b = int(raw_input("Where do you want to start? > ")) 
a = int(raw_input("How Many Labels do you need? >")) 
for x in range(b, b+a): 
    with open("Test_file{}.txt".format(x), "w") as file: 
     file.write("This is me typing {}".format(x)) 
+0

對不起,我應該提到,這是一個試圖獲得一個不同的(有點模糊的工業)程序來通過這些議案。我主要選擇和導航菜單,但過程的邏輯是什麼讓我。 – Elka

相關問題