我正在使用CS:GO的一些脚本文件,我必须从该文件中获取一些有用的信息,并将这些数据导入到我的python应用程序中。
这是txt数据格式的示例:
https://steamcdn-a.akamaihd.net/apps/730/scripts/items/items_game.83a9ad4690388868ab33c627af730c43d4b0f0d9.txt
这些值是随机格式(Color \ Pos \ String),但是我只需要一个包含所有值的字符串。我需要将这些信息放入字典中,例如:
print(global_dict['items_game']['game_info']['first_valid_class'])
<<2
我现在正在使用解析器,但是遇到很多问题。有没有针对该文件格式的现成解决方案?
这是一个基于pyparsing的解析器,它将解析此格式:
from pyparsing import Suppress, QuotedString, Forward, Group, Dict, ZeroOrMore
LBRACE,RBRACE = map(Suppress, "{}")
qs = QuotedString('"')
# forward-declare value, since this expression will be recursive
# (will contain expressions which use contain value's)
value = Forward()
key_value = Group(qs + value)
struct = LBRACE + Dict(ZeroOrMore(key_value)) + RBRACE
# define content of value using <<= operator
value <<= qs | struct
# define top-level parser
parser = Dict(key_value)
将配置加载到字符串中,然后调用parser.parseString()
:
sample = open('cs_go_sample.txt').read()
config = parser.parseString(sample)
print config.keys()
for k in config.items_game.keys():
print '-', k
config.items_game.pprint()
印刷品:
['items_game']
- sticker_kits
- client_loot_lists
- prefabs
- quest_definitions
- alternate_icons2
- music_definitions
- rarities
- colors
- campaign_definitions
- player_loadout_slots
- quest_schedule
- item_levels
- revolving_loot_lists
- game_info
- pro_players
- recipes
- items_game_live
- paint_kits_rarity
- paint_kits
- qualities
- items
- attributes
- item_sets
- quest_reward_loot_lists
- kill_eater_score_types
[['game_info',
['first_valid_class', '2'],
['last_valid_class', '3'],
['first_valid_item_slot', '0'],
['last_valid_item_slot', '54'],
['num_item_presets', '4']],
['rarities',
['default',
['value', '0'],
... etc. ...
编辑
如果希望在解析时将整数值转换为int,则可以定义解析动作来执行此操作。但是,您只想将此(我认为)附加到带引号的字符串,而不是键的值。
# use this code to convert integer values to ints at parse time
key_qs = qs.copy()
value_qs = qs.copy()
def convert_integers(tokens):
if tokens[0].isdigit():
tokens[0] = int(tokens[0])
value_qs.setParseAction(convert_integers)
value = Forward()
key_value = Group(key_qs + value)
struct = LBRACE + Dict(ZeroOrMore(key_value)) + RBRACE
value <<= value_qs | struct
parser = Dict(key_value)
现在,输出值如下所示:
[['game_info',
['first_valid_class', 2],
['last_valid_class', 3],
['first_valid_item_slot', 0],
['last_valid_item_slot', 54],
['num_item_presets', 4]],
['rarities',
['default',
['value', 0],
['loc_key', 'Rarity_Default'],
['loc_key_weapon', 'Rarity_Default_Weapon'],
请注意,整数值不再显示为字符串,而是显示为实际的Python整数。
问题内容: 如果一个人解析一个简单的Java样式 文件,该文件的内容是键值对(即没有INI样式节头),则该模块将引发异常。有一些解决方法吗? 问题答案: 说您有,例如: 即将是一种格式,除了它缺少开头部分的名称。然后,很容易伪造节标题: 用法: 输出:
我编写了以下代码来为新索引设置模板: 以下错误看起来像是我无法解决的一些语法错误: 启动(file, globals, locals)#执行脚本 File"/User/D/workspace/es_index_template/create_schema.py",第31行,在es.put_template("freshmilk_1", body=doc)File"/User/D/. viralen
#include <stdio.h> typedef struct { int a; int b; int c; int d; }ex_st; int main(void) { ex_st st = {1, 2, 3, 4}; printf("%d,%d,%d,%d\n", st.a, st.b,
问题内容: 我试图解析WMIC的输出,然后获取PID。 我的脚本如下: 输出如下: 我的目标是获取进程ID。 我已经尝试过将空间作为FOR循环中的delims。然而没有运气。 所以我的问题是如何格式化WMIC的列并获取列? 问题答案: WMIC使用SQL语法的子集。通过将LIKE运算符与通配符一起使用,可以在功能上将FINDSTR测试放在WMIC WHERE子句中。由于它在批处理脚本中,因此需要加
问题内容: 如何在Python中解析YAML文件? 问题答案: 不依赖标头的最简单,最纯净的方法是(文档),可以通过以下方式安装: 就是这样。一个普通的函数也存在,但是除非你明确需要提供的任意对象序列化/反序列化,以避免引入执行任意代码的可能性,否则通常应首选该函数。
问题内容: 我正在尝试从这样的站点地图中提取URL:https : //www.bestbuy.com/sitemap_c_0.xml.gz 我已经解压缩并将.xml.gz文件另存为.xml文件。结构如下: 我正在尝试使用ElementTree提取整个文件中 loc 节点内的所有URL ,但仍在努力使其正常工作。 根据文档,我正在尝试这样的事情: 但是,没有任何东西可以载入价值。我的目标是提取lo
问题内容: 我想做的就是对此URL发出get请求:http : //api.beatport.com/catalog/3/most-popular,该URL应该返回一些JSON,然后从中解析出某些信息。 我将如何在Actionscript3中执行此操作?我更关心的是弄清楚如何获取数据以将其馈送到JSON解析器而不是解析JSON,因为关于解析JSON似乎有很多问题。我要在AS3中执行此操作的原因是,
问题内容: 我该如何放置此python脚本: 在html文件中? 问题答案: 像这样的东西,如果要创建一个html,不一定要显示它: