Multiple Approaches for Dynamically Loading Variables from Text Files into Python Environment

Nov 29, 2025 · Programming · 8 views · 7.8

Keywords: Python | Variable Loading | JSON Parsing | Configuration Files | Dynamic Execution

Abstract: This article provides an in-depth exploration of various techniques for reading variables from text files and dynamically loading them into the Python environment. It focuses on the best practice of using JSON format combined with globals().update(), while comparing alternative approaches such as ConfigParser and dynamic module loading. The article explains the implementation principles, applicable scenarios, and potential risks of each method, supported by comprehensive code examples demonstrating key technical details like preserving variable types and handling unknown variable quantities.

Introduction

In Python development, there is often a need to read configuration parameters or variable values from external files. Traditional configuration file reading methods typically require explicit variable references in code, which limits code flexibility and maintainability to some extent. Based on practical development requirements, this article explores how to dynamically load variables from text files into the Python environment while supporting direct access via variable names.

Problem Analysis

Assume we have a structured text file with the following content:

var_a: 'home'
var_b: 'car'
var_c: 15.5

The objective is to read this file in Python and subsequently use variables like var_a, var_b, and var_c directly, without needing to access them through dictionary keys or configuration file sections. Additionally, the original data types of the variables, such as strings and floats, must be preserved.

JSON Solution: Best Practice

Using JSON format to store variable data is the most recommended solution for the following reasons:

Implementation Code

Below is the complete implementation code:

import json

def load_variables_from_file(filename):
    """Load variables from JSON file into global namespace"""
    with open(filename, 'r', encoding='utf-8') as file:
        data = json.load(file)
    
    # Add dictionary contents to global namespace
    globals().update(data)
    return data

# Usage example
if __name__ == "__main__":
    load_variables_from_file('config.json')
    print(var_b)  # Output: car
    print(var_c)  # Output: 15.5
    print(type(var_c))  # Output: <class 'float'>

JSON File Format

The corresponding JSON file should use standard format:

{
    "var_a": "home",
    "var_b": "car", 
    "var_c": 15.5
}

Key Technical Points

globals().update() Method: This is the core mechanism for dynamic variable loading. The globals() function returns the global symbol table dictionary of the current module. Using the update() method, key-value pairs from an external dictionary can be directly added to the global namespace.

Type Preservation: The JSON parser automatically converts numbers to Python int or float types, strings remain as str type, and booleans convert to bool type, thus perfectly preserving the original data types.

Alternative Approaches Comparison

ConfigParser Solution

Although ConfigParser is a configuration parsing module in Python's standard library, its access method is relatively cumbersome:

import configparser

config = configparser.ConfigParser()
config.read("config.ini")
var_a = config.get("myvars", "var_a")
var_b = config.get("myvars", "var_b")

This approach requires explicit specification of section names and variable names, preventing direct variable access.

Dynamic Module Loading Solution

Using imp.load_source, text files can be dynamically loaded as Python modules:

import imp

def getVarFromFile(filename):
    f = open(filename)
    global data
    data = imp.load_source('data', '', f)
    f.close()

getVarFromFile('mydata.txt')
print(data.var1)
print(data.var2)

While this method achieves the objective, it poses security risks and requires file content to conform to Python syntax standards.

exec Solution

In certain restricted environments, the exec statement can be used to achieve similar functionality:

the_dict = {'var_a': 'home', 'var_b': 'car', 'var_c': 15.5}
for (n, v) in the_dict.items():
    exec('%s=%s' % (n, repr(v)))

However, this method carries significant security risks and is not recommended for production environments.

Security Considerations

When using dynamic variable loading, the following security factors must be considered:

Cross-Language Compatibility

Another significant advantage of the JSON solution is its excellent cross-language compatibility. The same configuration file can be easily read by other languages like PHP and JavaScript:

// PHP example
$config = json_decode(file_get_contents('config.json'), true);
echo $config['var_a'];  // Output: home

// JavaScript example
fetch('config.json')
    .then(response => response.json())
    .then(data => console.log(data.var_b));  // Output: car

Performance Optimization

For frequently accessed configuration files, consider the following optimization strategies:

Practical Application Scenarios

This dynamic variable loading technique is particularly useful in the following scenarios:

Conclusion

By combining JSON format with the globals().update() method, we have achieved the goal of dynamically loading variables from text files into the Python environment. This approach not only preserves the original data types of variables and supports unknown quantities of variables but also offers good cross-language compatibility and relatively high security. In practical projects, it is recommended to select the most suitable configuration management solution based on specific requirements, finding the optimal balance between security, performance, and maintainability.

Copyright Notice: All rights in this article are reserved by the operators of DevGex. Reasonable sharing and citation are welcome; any reproduction, excerpting, or re-publication without prior permission is prohibited.