Куда ставить большие Python списки - PullRequest
0 голосов
/ 28 мая 2020

Я пишу программу python, которая использует список всех слов в словаре sh английского языка, поэтому мы говорим о нескольких мегабайтах. Я хотел бы чистый способ включения списка как константы, чтобы он не мешал исходному коду. Я бы поместил его в файл JSON или что-то в этом роде, но я использую PySimple GUI, и я хочу воспользоваться его способностью превращать код в файл Windows EXE, и я сомневаюсь, что это может сделать это с помощью внешнего текстового файла.

Итак, в порядке предпочтения я хотел бы сделать одно из следующего:

  1. Имейте это во внешнем текстовом файле, если PySimple Gui exe-maker может поддерживать это.
  2. Имейте его в другом python скрипте и импортируйте его.
  3. Имейте его в исходном python скрипте, но объявите его вверху, но фактически заполните его внизу, где он не будет мешать видеть исходный код.
  4. Объявите его со значениями и все в верхней части исходного файла и просто прокрутите вниз всякий раз, когда Я смотрю исходный код.

Как лучше всего с этим справиться? Есть ли какой-нибудь умный способ, которым я упускаю?

1 Ответ

1 голос
/ 28 мая 2020

Я лично считаю, что хранить данные в отдельном файле - самый чистый способ. Вы можете, например, просто создать csv или json или простой текстовый файл из другого приложения и просто поместить его в правильный каталог.

Кажется, что pysimple GUI сам по себе не создает исполняемые файлы , похоже, используется pyinstaller (https://pysimplegui.readthedocs.io/en/latest/#creating -a- windows -exe-file )

Pyinstaller позволяет добавлять файлы, отличные от python (например, в ваш случай json или файлы csv) в его исполняемый файл.

При запуске исполняемого файла создается временный каталог, и все python и добавленные файлы будут извлечены и сохранены в нем.

Вы должны использовать переключатель --add-data *source_path*:**destination_path**

Пример ниже показывает, как это сделать.

просто создайте в каталоге, где установлен ваш python скрипт, каталог с именем files и поместите в него свои файлы данных, которые вы хотите связать с вашим приложением.

Для этого примера это будет один файл с именем files/info.csv

Чтобы этот пример работал, он должен содержать хотя бы один строка.

Тогда создайте файл python (для этого теста со следующим содержимым)

пример имени файла: sg_w_fread.py

import os
import sys

import PySimpleGUI as sg

if getattr(sys, "frozen", False):
    # for executable mode
    BASEDIR = sys._MEIPASS  
else:
    # for development mode
    BASEDIR = os.path.dirname(os.path.realpath(__file__))

print("BASEDIR =", BASEDIR)


fname = os.path.join(BASEDIR, "files", "info.csv")

# just for debugging
print("FNAME", repr(fname))
print(os.path.isfile(fname))

sg.theme('DarkAmber')   # Add a touch of color

# read something from a file
with open(fname) as fin:
    txt = fin.read().split("\n")[0]

layout = [  [sg.Text("first line of file is '" + txt + "'")],  # display something from the file
            [sg.Text('Enter something on Row 2'), sg.InputText()],
            [sg.Button('Ok'), sg.Button('Cancel')] ]

window = sg.Window('Window Title', layout)

while True:
    event, values = window.read()
    if event in (None, 'Cancel'):   # if user closes window or clicks cancel
        break
    print('You entered ', values[0])

window.close()

и введите следующую команду для создания исполняемого файла:

pyinstaller -wF sg_w_fread.py --add-data files:files
...