よし、複数のファイルからテキストをコピーし、それを別のファイル拡張子の新しいファイルに貼り付けるこの python スクリプトがあります。ほぼ完了しましたが、更新ボタンに問題があります。
それを使用するには、いくつかのファイルを「入力」ディレクトリに置き、プログラムを実行してください。
ユーザーが「Input」フォルダーにファイルがない状態でプログラムを実行し、ファイル数がゼロであることを確認してからフォルダーにいくつかのファイルを配置した場合、 file_count 変数を再ロードします。
現時点では、プログラムの別のインスタンスを開き、最初のインスタンスを閉じる「refresh()」という関数があります。これは機能しますが、「os.startfile」はこの用途向けに設計されていないため、いくつかの問題があります。
まずもちろん、プログラム全体を再起動するのはやり過ぎのようです。
次に、「os.startfile」は Windows でのみ機能します。
第 3 に、ウィンドウを移動してからプログラムを「更新」すると、新しいインスタンスがデフォルトの位置で開きます。
それで、「file_count」変数だけを再実行する方法はありますか?
PS。私は独学なので、知識にギャップがあります (明らかに、これはその 1 つです)。PPS。ちょうど講義が始まるので、1時間以内にしか返信できません。
import sys
import os, os.path
from os import listdir
import shutil
from Tkinter import *
from Tkinter import Tk
from tkFileDialog import askopenfilename
path, dirs, files = os.walk(os.path.join(os.getcwd(), 'Input')).next()
file_count = len(files)
dirList = os.listdir(path)
def refresh():
opencp = os.startfile(os.path.join(os.getcwd(), 'Copy_Paster.py'))
closecp = os.execl(sys.executable, *([sys.executable]+sys.argv))
def copy_paste():
# Copy pastes text from source documents to new ones.
for fname in dirList:
print fname
extension = text_entered.get()
copy = open(os.path.join(os.getcwd(), 'Input', fname), "r")
paste = open(os.path.join(os.getcwd(), 'Output', fname + extension), "w+")
copy.seek(0)
shutil.copyfileobj(copy,paste)
copy.close()
paste.close()
# Window Geometry
width = "250"
height = "70"
# Window
root = Tk()
root.geometry(width+"x"+height+"+500+200",)
root.resizable(0,0)
root.title("Copy Paster")
text_entered = StringVar()
counter = Label(text="Input Directory: " + str(file_count) + " files.")
counter.place(x=int(width)-248,y=int(height)-63)
refresh = Button(root,command=refresh,text="Refresh")#Why this no work?
refresh.place(x=int(width)-80,y=int(height)-65, width=70)
format_label = Label(text="Output File Format:")
format_label.place(x=int(width)-248,y=int(height)-35)
document_type = Entry(root, textvariable=text_entered)
document_type.place(x=int(width)-135,y=int(height)-33, width=40)
convert = Button(root,command=copy_paste,text="GO!")
convert.place(x=int(width)-80,y=int(height)-35, width=70)
root.mainloop()