programing

파이썬에서 빠르고 쉬운 파일 대화?

closeapi 2023. 7. 20. 21:56
반응형

파이썬에서 빠르고 쉬운 파일 대화?

파일을 구문 분석하고 내용을 데이터베이스에 로드하는 간단한 스크립트가 있습니다.은 UI를 사용하여 분석하도록 raw_input특히 사용자가 경로를 복사/수정할 수 없기 때문에 가장 비우호적입니다.사자에게선대를빠자쉽르보파고일선다택음한다원합 니있방수법 을는데로이용드 (내의 경우, 그들이 파일을 했다면, 분석에 이고, 것입니다(제 사용 사례에서는 파일을 잘못 선택한 경우 구문 분석에 실패하고 데이터베이스에 로드되더라도 문제가 되지 않습니다.)

import tkFileDialog
file_path_string = tkFileDialog.askopenfilename()

이 코드는 내가 원하는 것에 가깝지만 성가신 빈 프레임을 열어 둡니다(닫기 이벤트 핸들러를 등록하지 않았기 때문일 수 있음).

저는 tkInter를 사용할 필요가 없지만, 파이썬 표준 라이브러리에 있기 때문에 가장 빠르고 쉬운 솔루션의 좋은 후보입니다.

다른 UI 없이 스크립트에서 파일이나 파일 이름을 빠르고 쉽게 입력할 수 있는 방법은 무엇입니까?

다른 의존성을 원하지 않는다면 Tkinter가 가장 쉬운 방법입니다.다른 GUI 요소 없이 대화 상자만 표시하려면 다음 방법을 사용하여 루트 창을 숨겨야 합니다.

import tkinter as tk
from tkinter import filedialog

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

file_path = filedialog.askopenfilename()

파이썬 2 변형:

import Tkinter, tkFileDialog

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

file_path = tkFileDialog.askopenfilename()

간단한 gui를 사용할 수 있습니다.

import easygui

path = easygui.fileopenbox()

설치하려면 다음을 사용합니다.pip:

pip3 install easygui

은 단일 모듈입니다.easygui.py를 사용합니다.tkinter.

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')

pywin32에는 에 액세스할 수 .GetOpenFileNamewin32 함수입니다.예제에서

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

Tkinter(파이톤 2) 또는 Tkinter(파이톤 3)를 사용하면 실제로 파일 열기 대화 상자를 표시할 수 있습니다(여기의 다른 답변 참조).그러나 해당 대화 상자의 사용자 인터페이스가 오래되어 Windows 10에서 사용할 수 있는 최신 파일 열기 대화 상자와 일치하지 않습니다.

게다가 - 만약 당신이 당신 자신의 애플리케이션에 파이썬 지원을 내장하는 방법을 찾고 있다면, 당신은 곧 Tkinter 라이브러리가 오픈 소스 코드가 아니라는 것을 알게 될 것이고, 더 나아가서는 상업적인 라이브러리라는 것을 알게 될 것입니다.

(예를 들어 "active tcl price"를 검색하면 다음 웹 페이지로 이동합니다. https://reviews.financesonline.com/p/activetcl/)

그래서 tkinter 라이브러리는 python을 임베디드하기를 원하는 모든 애플리케이션에 비용이 들 것입니다.

저는 혼자서 파이썬넷 라이브러리를 찾을 수 있었습니다.

  • 여기서 개요: http://pythonnet.github.io/
  • 여기에 있는 소스 코드:

(MIT 라이센스)

다음 명령을 사용하여 pythonnet을 설치할 수 있습니다.

pip3 install pythonnet

다음은 열린 파일 대화 상자를 사용하는 작업 예제입니다.

https://stackoverflow.com/a/50446803/2338477

여기에 예제도 복사하겠습니다.

import sys
import ctypes
co_initialize = ctypes.windll.ole32.CoInitialize
#   Force STA mode
co_initialize(None)

import clr 

clr.AddReference('System.Windows.Forms')

from System.Windows.Forms import OpenFileDialog

file_dialog = OpenFileDialog()
ret = file_dialog.ShowDialog()
if ret != 1:
    print("Cancelled")
    sys.exit()

print(file_dialog.FileName)

또한 더 복잡한 사용자 인터페이스가 없는 경우 pythonnet git의 데모 폴더를 참조하십시오.

다른 OS로의 이식성에 대해서는 확신할 수 없지만, 시도해 본 적은 없지만, .net 5는 여러 OS로 이식될 예정입니다(".net 5 플랫폼 검색", https://devblogs.microsoft.com/dotnet/introducing-net-5/ ). 따라서 이 기술은 미래의 증거이기도 합니다.

UI가 필요하지 않거나 프로그램이 CLI에서 실행될 것으로 예상되는 경우 파일 경로를 인수로 구문 분석할 수 있습니다.이렇게 하면 CLI의 자동 완성 기능을 사용하여 필요한 파일을 빠르게 찾을 수 있습니다.

이는 스크립트가 파일 경로 입력 이외에 대화형이 아닌 경우에만 유용합니다.

운영 체제에 구애받지 않는 다른 옵션인 pywebview를 사용합니다.

import webview

def webview_file_dialog():
    file = None
    def open_file_dialog(w):
        nonlocal file
        try:
            file = w.create_file_dialog(webview.OPEN_DIALOG)[0]
        except TypeError:
            pass  # user exited file dialog without picking
        finally:
            w.destroy()
    window = webview.create_window("", hidden=True)
    webview.start(open_file_dialog, window)
    # file will either be a string or None
    return file

print(webview_file_dialog())

환경: Mac에서 python 3.8.6 - 이전에 윈도우 10에서 pywebview를 사용한 적이 있습니다.

Windows 전용의 작은 속임수를 발견했습니다. 하위 프로세스에서 powershell.exe를 실행하십시오.

import subprocess

sys_const = ssfDESKTOP # Starts at the top level
# sys_const = 0x2a # Correct value for "Program Files (0x86)" folder
powershell_browse = "(new-object -COM 'Shell.Application')."
powershell_browse += "BrowseForFolder(0,'window title here',0,sys_const).self.path"

ret = subprocess.run(["powershell.exe",powershell_browse], stdout=subprocess.PIPE)
print(ret.stdout.decode())

시스템 폴더 상수를 선택적으로 사용합니다.shldisp.h에 "Program Files (0x86)" 상수가 잘못 할당되었다는 모호한 오타가 있습니다.저는 정확한 값의 코멘트를 추가했습니다.그것을 알아내는 데 시간이 좀 걸렸습니다.)

아래에 더 많은 정보:

시스템 폴더 상수

언급URL : https://stackoverflow.com/questions/9319317/quick-and-easy-file-dialog-in-python

반응형