使用Python解析.strings文件

时间:2010-01-25 12:49:56

标签: iphone python objective-c core-foundation

我正在尝试编写一个小的Python脚本来解析我的iPhone应用程序项目中的.strings文件,并确定哪些键可能没有被使用。我也在做一些字符串匹配来过滤掉一些结果。这是我的问题开始:)。如果我尝试像

那样的话
for file_line in strings_file:    
    if 'search_keyword' in file_line:
        ...

搜索关键字通常不匹配,即使我打印相同的每个文件行,因为我似乎正在正确阅读文本并显示我的搜索关键字。

问题是这些.strings文件采用某种二进制格式。有谁知道解析这些文件的正确方法?

3 个答案:

答案 0 :(得分:2)

没有使用这些.strings文件的经验,但这就是您找不到匹配项的原因:

strings_file.read()

返回带有文件完整内容的字符串。迭代字符串迭代单个字符,即在for循环中,file_line不是一行,它总是只有一个字符(长度为1的字符串) ,显然不能包含多字符搜索词。

答案 1 :(得分:2)

使用正确的编码打开.strings - 文件和source code。根据{{​​3}},您的文件编码可能是utf-16。

# -*- coding: utf-8 -*-
import codecs

for line in codecs.open(u'your_file.strings', encoding='utf-16'):
    if u'keyword' in line:
       # process line

答案 2 :(得分:0)

听起来stings文件已保存为数据。如果python无法读取它,您可以将其转换为Objective-c中的纯​​文本文件。

只是:(1)将字符串文件读入具有正确编码的文件中。 (2)转换为字典(3)将字典写入另一个文件。

所以:

NSString *strings=[NSString stringWithContentsOfFile:filePath encoding:NSUTF16StringEncoding error:&error];
NSDictionary *dict=[strings propertyList];
[dict writeToFile:anotherFilePath atomically:NO];