如何将.txt数据永久嵌入Python代码中?
解决方案:将静态TXT文件整合到Python代码/可执行文件中
以下是几种无需手动复制TXT内容,就能把静态文件整合到代码或可执行文件里的实用方法:
1. 用Python标准库嵌入资源(适配打包场景)
如果你的Python版本是3.7+,可以用importlib.resources直接读取同目录的静态文件,PyInstaller这类打包工具会自动识别并包含该文件:
import importlib.resources # 读取文件内容并转为列表(按行分割,可按需调整处理逻辑) with importlib.resources.open_text(__package__, "data.txt") as f: data_list = [line.strip() for line in f if line.strip()]
Python 3.6及以下版本可改用pkgutil.get_data:
import pkgutil raw_data = pkgutil.get_data(__name__, "data.txt").decode("utf-8") data_list = [line.strip() for line in raw_data.splitlines() if line.strip()]
2. 用PyInstaller打包时嵌入文件
若要生成单文件可执行程序,PyInstaller的--add-data参数可把TXT文件打包进去,运行时程序会自动提取到临时目录:
打包命令:
# Windows系统 pyinstaller --onefile --add-data "data.txt;." your_script.py # macOS/Linux系统 pyinstaller --onefile --add-data "data.txt:." your_script.py
主脚本读取逻辑:
import os import sys def get_resource_path(relative_path): try: # 打包后的临时路径 base_path = sys._MEIPASS except AttributeError: # 未打包时的本地路径 base_path = os.path.abspath(".") return os.path.join(base_path, relative_path) # 读取文件生成列表 file_path = get_resource_path("data.txt") with open(file_path, "r", encoding="utf-8") as f: data_list = [line.strip() for line in f if line.strip()]
3. 自动生成包含TXT内容的Python模块
写个辅助脚本自动把TXT内容转成Python变量,彻底避免手动复制:
辅助脚本(generate_data_module.py):
with open("data.txt", "r", encoding="utf-8") as f: lines = [repr(line.strip()) for line in f if line.strip()] # 生成data.py文件,直接定义data_list变量 with open("data.py", "w", encoding="utf-8") as f: f.write(f"data_list = [{', '.join(lines)}]\n")
运行辅助脚本后会生成data.py,主脚本直接导入即可:
from data import data_list # 直接使用预处理好的列表 print(data_list)
这种方法适合TXT内容固定不变的场景,后续打包仅需包含生成的data.py。
内容的提问来源于stack exchange,提问作者Tau307
相关产品推荐
相关产品推荐

