1

よし、複数のファイルからテキストをコピーし、それを別のファイル拡張子の新しいファイルに貼り付けるこの 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()
4

1 に答える 1