3

我现在在 Python 和 Pygame 方面相对有经验,可以创建一些基本的 2D 图形游戏。现在我希望能够创建一个配置文件 (config.cfg),以便我可以永久存储游戏的设置和配置,例如窗口宽度和高度以及 FPS 计数。该文件应垂直读取,例如

FPS = 30
WINDOW_WIDTH = 1280
WINDOW_HEIGHT = 720
etc.

显然,我需要能够从我的游戏中读取(和创建)这个文件,并且在不接触文本标签的情况下编辑这些值。尽管我在 Python 中使用过文本文件,但我之前没有接触过这些东西,所以我需要尽可能多的指导。我在 Windows 8 Pro x64 上使用 Python 3.3 和 Pygame 1.9。

提前致谢, 伊尔蒙

4

3 回答 3

3

您可以使用configparser (ConfigParser for < Python 3) 模块来做到这一点。

文档中的示例(这使用 Python 2.* 语法,您必须使用configparser):

import ConfigParser

config = ConfigParser.RawConfigParser()
config.read('example.cfg')

a_float = config.getfloat('Section1', 'a_float')
an_int = config.getint('Section1', 'an_int')
print a_float + an_int

if config.getboolean('Section1', 'a_bool'):
    print config.get('Section1', 'foo')

import ConfigParser

config = ConfigParser.RawConfigParser()

config.add_section('Section1')
config.set('Section1', 'an_int', '15')
config.set('Section1', 'a_bool', 'true')
config.set('Section1', 'a_float', '3.1415')
config.set('Section1', 'baz', 'fun')
config.set('Section1', 'bar', 'Python')
config.set('Section1', 'foo', '%(bar)s is %(baz)s!')

with open('example.cfg', 'wb') as configfile:
    config.write(configfile)
于 2013-11-12T09:25:06.393 回答
3

myConfig.cfg:

[info]

Width = 100

Height = 200

Name = My Game

在python中解析:

import ConfigParser

configParser = ConfigParser.RawConfigParser()
configFilePath = os.path.join(os.path.dirname(__file__), 'myConfig.cfg')
configParser.read(configFilePath)
gameName = configParser.get("info","Name")
gameWidth  = configParser.get("info","Width")
gameHeight = configParser.get("info","Height")

configParser.set('info', 'Name', 'newName')
config.write(configFilePath)

解释:

首先我们创建一个实例,ConfigParser然后我们告诉实例.cfg文件所在的位置,在它刚刚读取之后。第二部分我们处理写作。

更多信息:

来自Docs的配置解析器

如果您正在寻找更灵活的东西,请尝试YAMLPyYAML

于 2013-11-12T09:26:42.250 回答
2

在 python 中文件处理非常简单。而且,出于您的目的,我建议使用json.

你可以编写类似的代码

import os
import json

# Default settings
default_settings = {'FPS': 30,
                    'WINDOW_HEIGHT': 720,
                    'WINDOWS_WIDTH': 1280
                    }
handle_settings(default_settings)

def handle_settings(settings):
    if os.path.exists(os.path.join(os.getcwd(), 'config.cfg')):
        with open('config.cfg', 'r') as settings_file:
            settings = json.load(settings_file) # load from file
    else:
        with open('config.cfg', 'w') as settings_file:
            json.dump(settings, settings_file)  # write to file

# Changed settings as per user config
handle_settings(changed_settings)
于 2013-11-12T09:34:54.343 回答