在哪里放置大型 Python 列表

Where to put large Python lists

我正在编写一个 python 程序,它使用英语词典中所有单词的列表,所以我们说的是几兆字节。我想要一种干净的方法来将列表作为常量包含在内,而不会妨碍源代码。我会把它放在 JSON 文件或其他文件中,但我使用的是 PySimpleGUI,我想利用它把代码转换成 Windows EXE 文件的能力,但我怀疑它能否使用外部文本文件执行此操作。

因此,按照优先顺序,我想执行以下操作之一:

  1. 如果 PySimpleGui 的 exe-maker 可以支持,请将它放在外部文本文件中。
  2. 将其放在另一个 python 脚本中并导入。
  3. 在原来的python脚本中有,但在顶部声明但实际上在底部填充它不会妨碍查看源代码。
  4. 在源文件的顶部用值和全部声明它,每当我查看源代码时,只需向下滚动到底部。

解决这个问题的最佳方法是什么?有没有我想念的聪明方法?

我个人认为将数据放在一个单独的文件中是最干净的方法。 例如,您可以从另一个应用程序创建一个 csvjson 或简单的文本文件,然后将其放在正确的目录中。

看来,pysimpleGUI 本身并不创建可执行文件,它似乎在使用 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