File: global_replace.py

package info (click to toggle)
nltk 3.9.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 9,384 kB
  • sloc: python: 78,923; makefile: 180; sh: 68; xml: 17
file content (60 lines) | stat: -rwxr-xr-x 1,667 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/usr/bin/env python
#
# Natural Language Toolkit: substitute a pattern with
#                           a replacement in every file
# Copyright (C) 2001-2024 NLTK Project
# Author: Edward Loper <edloper@gmail.com>
#         Steven Bird <stevenbird1@gmail.com>
# URL: <https://www.nltk.org/>
# For license information, see LICENSE.TXT

# NB Should work on all platforms,
# http://www.python.org/doc/2.5.2/lib/os-file-dir.html

import os
import stat
import sys


def update(file, pattern, replacement):
    try:
        # make sure we can write the file
        old_perm = os.stat(file)[0]
        if not os.access(file, os.W_OK):
            os.chmod(file, old_perm | stat.S_IWRITE)

        # write the file
        s = open(file, "rb").read().decode("utf-8")
        t = s.replace(pattern, replacement)
        out = open(file, "wb")
        out.write(t.encode("utf-8"))
        out.close()

        # restore permissions
        os.chmod(file, old_perm)

        return s != t

    except Exception:
        exc_type, exc_obj, exc_tb = sys.exc_info()
        print(f"Unable to check {file:s} {str(exc_type):s}")
        return 0


if __name__ == "__main__":
    if len(sys.argv) != 3:
        exit("Usage: %s <pattern> <replacement>" % sys.argv[0])

    pattern = sys.argv[1]
    replacement = sys.argv[2]
    count = 0

    for root, dirs, files in os.walk("."):
        if not ("/.git" in root or "/.tox" in root):
            for file in files:
                path = os.path.join(root, file)
                if update(path, pattern, replacement):
                    print("Updated:", path)
                    count += 1

    print(f"Updated {count} files")