web-dev-qa-db-ja.com

Pythonのすばやく簡単なファイルダイアログ?

ファイルを解析し、その内容をデータベースにロードする簡単なスクリプトがあります。 UIは必要ありませんが、今のところ、特にユーザーがパスをコピー/貼り付けできないため、raw_inputを使用して解析するファイルの解析をユーザーに求めています。ユーザーにファイル選択ダイアログを表示する迅速で簡単な方法が欲しいのですが、ユーザーはファイルを選択して、データベースにロードします。 (私の使用例では、偶然間違ったファイルを選択した場合、解析に失敗し、データベースにロードされていても問題はありません。)

import tkFileDialog
file_path_string = tkFileDialog.askopenfilename()

このコードは私が望むものに近いですが、迷惑な空のフレームを開いたままにします(おそらく、閉じるイベントハンドラーを登録していないため、閉じることができません)。

TkInterを使用する必要はありませんが、Python標準ライブラリにあるため、最も迅速で簡単なソリューションの候補として適しています。

他のUIを使用せずにスクリプト内のファイルまたはファイル名をすばやく簡単に入力する方法はありますか?

84
Buttons840

Tkinterは、他の依存関係を持ちたくない場合に最も簡単な方法です。他のGUI要素なしでダイアログのみを表示するには、 withdraw メソッドを使用してルートウィンドウを非表示にする必要があります。

import tkinter as tk
from tkinter import filedialog

root = tk.Tk()
root.withdraw()

file_path = filedialog.askopenfilename()

Python 2バリアント:

import Tkinter, tkFileDialog

root = Tkinter.Tk()
root.withdraw()

file_path = tkFileDialog.askopenfilename()
158
tomvodi

easygui を使用できます。

import easygui

path = easygui.fileopenbox()

easygui をインストールするには、pipを使用できます。

pip3 install easygui

tkinterを使用する単一の純粋なPythonモジュール(easygui.py)です。

21
jfs

wxPython で試してください:

import wx

def get_path(wildcard):
    app = wx.App(None)
    style = wx.FD_OPEN | wx.FD_FILE_MUST_EXIST
    dialog = wx.FileDialog(None, 'Open', wildcard=wildcard, style=style)
    if dialog.ShowModal() == wx.ID_OK:
        path = dialog.GetPath()
    else:
        path = None
    dialog.Destroy()
    return path

print get_path('*.txt')
16
FogleBird

UIが不要な場合、またはプログラムがCLIで実行されると予想される場合は、引数としてファイルパスを解析できます。これにより、CLIのオートコンプリート機能を使用して、必要なファイルをすばやく見つけることができます。

これはおそらく、スクリプトがファイルパス入力以外に非対話型である場合にのみ便利です。

4
SQDK

EasyGUIを確認してください。これは、非常に使いやすいモジュールで、仕事をする必要があります- http://easygui.sourceforge.net/

このAPIドキュメントページで詳しく説明されているfileopenbox関数を使用します。 https://easygui.readthedocs.io/en/latest/api.html

2
timc

pywin32は、GetOpenFileName win32関数へのアクセスを提供します。 から

import win32gui, win32con, os

filter='Python Scripts\0*.py;*.pyw;*.pys\0Text files\0*.txt\0'
customfilter='Other file types\0*.*\0'
fname, customfilter, flags=win32gui.GetOpenFileNameW(
    InitialDir=os.environ['temp'],
    Flags=win32con.OFN_ALLOWMULTISELECT|win32con.OFN_Explorer,
    File='somefilename', DefExt='py',
    Title='GetOpenFileNameW',
    Filter=filter,
    CustomFilter=customfilter,
    FilterIndex=0)

print 'open file names:', repr(fname)
print 'filter used:', repr(customfilter)
print 'Flags:', flags
for k,v in win32con.__dict__.items():
    if k.startswith('OFN_') and flags & v:
        print '\t'+k
0
Kevin Smyth