在Python中,如何在读取后进行写操作?

在Python中,如何在读取后进行写操作?,python,regex,file,Python,Regex,File,我目前正在读取一个文件,对其进行一些更改,然后尝试保存它。我可以打印read to console并查看更改,但我在尝试在更改后如何保存它时遇到了困难。我尝试在读取时执行f.write,但这是不可写的,因此我不确定必须进行哪些更改才能允许写入更改。下面是我的代码 import re import os directory = r'C:\file\directory\location' for filename in os.scandir(directory): with

我目前正在读取一个文件,对其进行一些更改,然后尝试保存它。我可以打印read to console并查看更改,但我在尝试在更改后如何保存它时遇到了困难。我尝试在读取时执行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)

最简单的方法是读取、修改和写入文件:

重新导入
导入操作系统
def修改(视图):
Tbl=重新搜索(r“\B标识符([A-Za-z]+)”,视图)。组(1)
ISN=Tbl+“.ISN\u类型\u CD”
StringReplace={
“.BUSINESS_ID”:“.HCE_ID”,
“.trade\u id的类作为COT\u id”:“.COT\u id”,
“CCN”不是典型的CD:ISN,
“PHX_凤凰城PHX_OREF_巴士线”:“PHX_OREF_巴士线”,
“标识符”:“PHX_组织外部信息”,
“.PRVDR_NUM_CCN”:“.PRVDR_NUM_CCN”,
“.identifier_part1”:“.ISN”,
“第(3)项中的标识符id:“非典型CD IN('CCN')”,
“标识符id=3”:“非典型CD IN('CCN')”,
“企业名称”:“PHX组织”,
“.entity_id=.business_id”:“.HCE_id=.HCE_id”,
}
对于StringReplace.items()中的k、v:
视图=视图。替换(k,v)
view=f.write(re.sub(r“和\b\w+\.active\u状态=1\s*\n”,“视图,标志=re.IGNORECASE))
view=f.write(re.sub(r”和\b\w+\.Order\u Type=\'PR\'\s*\n',“”,view,flags=re.IGNORECASE))
返回视图
def main():
directory=r“C:\file\directory\location”
对于os.scandir(目录)中的文件名:
打开(文件名)为f时:
原始数据=f.读取()
新建\u数据=修改(原始\u数据)
如果有新的_数据!=原始数据:
打印(文件名)
#可以选择在此处将原始文件复制/重命名为备份
打开(文件名为“w”)作为f:
f、 写入(新数据)
如果名称=“\uuuuu main\uuuuuuuu”:
main()

open(filename)
默认情况下以读取模式打开文件,因为它相当于
open(filename,'r')
这不会按您想要的方式工作;如果不重写文件的其余部分,就不能用不同长度的字符串替换字符串。谢谢。我的正则表达式在执行此操作时停止工作,但我认为你让我走上了正确的方向!