用于在一组文件中查找一组字符串实例的 Python 脚本

标签 python find internationalization

我有一个文件,用于集中我的应用程序中使用的所有字符串。让我们称之为 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/

相关文章:

php - 如何将日期间隔格式化为文本(国际化)

python - 如何将 functools.singledispatch 与实例方法一起使用?

python - SQLAlchemy 创建 mySQL 表时遇到问题 sqlalchemy.exc.InternalError

python - 使用 python 创建数字模式

visual-studio-code - 如何关闭 VSC 中新的 Explorer Ctrl+F 查找工具?

localization - 我有一个国家代码列表和一个语言代码列表。如何从国家/地区代码映射到语言代码?

ruby-on-rails - 定位图像的最佳方法

python语言环境货币到0小数

javascript - 有没有办法在javascript中检测页面搜索中的查找

c++ - 在文本文件中查找(“)c++