File size: 2,785 Bytes
a4f8599
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import argparse
import shutil
import re

def replace_characters_between_strings(filename, copyname, stringA, stringB, replacements, encoding='utf-8'):
    # Create a copy of the original file
    shutil.copyfile(filename, copyname)

    # Open the original file for reading with the specified encoding
    with open(filename, 'r', encoding=encoding) as input_file:
        # Open the copy for writing with the specified encoding
        with open(copyname, 'w', encoding=encoding) as output_file:
            inside_text = False

            # Process each line in the input file
            for line in input_file:
                if re.search(re.escape(stringA), line):
                    inside_text = True

                # Replace the characters in the line if inside_text is True
                if inside_text:
                    for char_to_replace, replacement_char in replacements:
                        line = line.replace(char_to_replace, replacement_char)

                output_file.write(line)

                if re.search(re.escape(stringB), line):
                    inside_text = False

# Parse command-line arguments
parser = argparse.ArgumentParser(description='Replace user-defined characters between user-defined strings in a file.')
parser.add_argument('filename', type=str, nargs='?', help='the name of the input file')
parser.add_argument('copyname', type=str, nargs='?', help='the name of the copy file')
parser.add_argument('stringA', type=str, nargs='?', help='the starting string')
parser.add_argument('stringB', type=str, nargs='?', help='the ending string')
parser.add_argument('replacements', nargs='*', metavar=('char_to_replace', 'replacement_char'), help='character replacements (e.g., a b c d)')
parser.add_argument('--encoding', type=str, default='utf-8', help='the file encoding (default: utf-8)')
args = parser.parse_args()

# Prompt for missing arguments if not provided
if not args.filename:
    args.filename = input("Enter the name of the input file: ")
if not args.copyname:
    args.copyname = input("Enter the name of the output file: ")
if not args.stringA:
    args.stringA = input("Enter the starting string: ")
if not args.stringB:
    args.stringB = input("Enter the ending string: ")
if not args.replacements:
    args.replacements = []
    while True:
        char_to_replace = input("Enter the character to replace (or press Enter to finish): ")
        if not char_to_replace:
            break
        replacement_char = input("Enter the replacement character: ")
        args.replacements.append((char_to_replace, replacement_char))

# Execute the program with the provided arguments
replace_characters_between_strings(args.filename, args.copyname, args.stringA, args.stringB, args.replacements, encoding=args.encoding)