Как сделать запись после чтения в Python? - PullRequest
0 голосов
/ 28 января 2020

Я сейчас читаю в файле, вносю в него несколько изменений, а затем пытаюсь сохранить его. Я могу распечатать чтение в консоль и увидеть изменения, но у меня возникают проблемы при попытке выяснить, как сохранить его после внесения изменений. Я пытался сделать f.write на чтение, но это не для записи, поэтому я не уверен, какие изменения я должен сделать, чтобы изменения могли быть записаны. Ниже мой код

import re
import os

directory = r'C:\file\directory\location'   

for filename in os.scandir(directory):  

    with open(filename) as f:
        view = f.read()

        Tbl = re.search(r'\bidentifiers ([A-Za-z]+)', view).group(1)

        ISN = Tbl+'.ISN_TYP_CD'
        StringReplace = {   '.BUSINESS_ID': '.HCE_ID', 
                        '.class_of_trade_id as COT_ID' : '.COT_ID', 
                        '\'CCN\' as ISN_TYP_CD' : ISN,
                        'PHX_Phoenix_PHX_OREF_BUS_DETL' : 'PHX_OREF_BUS_DETL', 
                        'identifiers' : 'PHX_ORG_EXTRNL_ISN',
                        '.PRVDR_NUM_CCN' : '.PRVDR_NUM_CCN',
                        '.identifier_part1' : '.ISN',
                        'identifier_id IN (3)' : 'ISN_TYP_CD IN (\'CCN\')',
                        'identifier_id  = 3' : 'ISN_TYP_CD IN (\'CCN\')',
                        'business_name' : 'PHX_ORG',
                        '.entity_id = .business_id' : '.HCE_ID = .HCE_ID'
                    }
        for k, v in StringReplace.items():
            view = view.replace(k, v)

        view = f.write(re.sub(r'and \b\w+\.active_status = 1\s*\n', '', view, flags=re.IGNORECASE))
        view = f.write(re.sub(r'and \b\w+\.Order_Type = \'PR\'\s*\n', '', view, flags=re.IGNORECASE))
    print(filename)

1 Ответ

0 голосов
/ 28 января 2020

Проще всего просто прочитать, изменить, а затем записать файлы:

import re
import os


def modify(view):
    Tbl = re.search(r"\bidentifiers ([A-Za-z]+)", view).group(1)
    ISN = Tbl + ".ISN_TYP_CD"
    StringReplace = {
        ".BUSINESS_ID": ".HCE_ID",
        ".class_of_trade_id as COT_ID": ".COT_ID",
        "'CCN' as ISN_TYP_CD": ISN,
        "PHX_Phoenix_PHX_OREF_BUS_DETL": "PHX_OREF_BUS_DETL",
        "identifiers": "PHX_ORG_EXTRNL_ISN",
        ".PRVDR_NUM_CCN": ".PRVDR_NUM_CCN",
        ".identifier_part1": ".ISN",
        "identifier_id IN (3)": "ISN_TYP_CD IN ('CCN')",
        "identifier_id  = 3": "ISN_TYP_CD IN ('CCN')",
        "business_name": "PHX_ORG",
        ".entity_id = .business_id": ".HCE_ID = .HCE_ID",
    }
    for k, v in StringReplace.items():
        view = view.replace(k, v)

    view = f.write(re.sub(r"and \b\w+\.active_status = 1\s*\n", "", view, flags=re.IGNORECASE))
    view = f.write(re.sub(r"and \b\w+\.Order_Type = \'PR\'\s*\n", "", view, flags=re.IGNORECASE))
    return view


def main():

    directory = r"C:\file\directory\location"

    for filename in os.scandir(directory):
        with open(filename) as f:
            original_data = f.read()
        new_data = modify(original_data)
        if new_data != original_data:
            print(filename)
            # optionally copy/rename the original file to a backup here
            with open(filename, "w") as f:
                f.write(new_data)


if __name__ == "__main__":
    main()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...