我有一个文件,用于集中我的应用程序中使用的所有字符串。让我们称之为 Strings.txt;
TITLE="Title"
T_AND_C="Accept my terms and conditions please"
START_BUTTON="Start"
BACK_BUTTON="Back"
...
这对我的 I18n 有帮助,问题是我的应用程序现在大了很多并且已经发展。因此,很多这些字符串可能不再使用了。我想消除那些已经消失的并整理文件。
我想编写一个 python 脚本,使用正则表达式我可以获得所有的字符串别名,但是我如何在 Java 包层次结构中的所有文件中搜索字符串实例?如果我有使用 perl 或 bash 的原因,请尽可能告诉我,但我更愿意坚持使用一种脚本语言。
如果这没有意义,请要求澄清,希望这是直截了当的,我只是没怎么用过 python。
提前致谢
加夫
最佳答案
假设文件的大小合理(与源文件一样),因此您可以轻松地在内存中读取它们,并且您正在寻找 = 符号右侧引号中的部分:
import collections
files_by_str = collections.defaultdict(list)
thestrings = []
with open('Strings.txt') as f:
for line in f:
text = line.split('=', 1)[1]
text = text.strip().replace('"', '')
thestrings.append(text)
import os
for root, dirs, files in os.walk('/top/dir/of/interest'):
for name in files:
path = os.path.join(root, name)
with open(path) as f:
data = f.read()
for text in thestrings:
if text in data:
files_by_str[text].append(path)
break
这为您提供了一个包含文本(仅出现在 1 个以上文件中的文本)作为键的字典,以及包含这些文本的文件的路径列表作为值。如果你只关心“这个文本是否出现在某处”这个问题的是/否答案,而不关心在哪里,你可以通过只保留一个集合而不是 defaultdict 来节省一些内存;但我认为经常了解每个文本包含哪些文件会很有用,所以我建议使用这个更完整的版本。
关于用于在一组文件中查找一组字符串实例的 Python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1483830/