代码之家  ›  专栏  ›  技术社区  ›  Bhaskar Bhuyan

在python中编辑文本文件

  •  0
  • Bhaskar Bhuyan  · 技术社区  · 7 年前

    我有一个文本文件,看起来像:

    CREATE TABLE address(
    
        location_pk integer NULL,
    
        City varchar(50) NULL, 
    
        Address1 varchar(50) NULL, 
    
        Address2 varchar(50) NULL, 
    
    CREATE TABLE name(
    
        idinteger NULL,
    
        City varchar(50) NULL, 
    
        RootDCTKey integer NULL, 
    
        Class varchar(50) NULL, 
    
    CREATE TABLE location(
    
        location_pk integer NULL,
    
        City varchar(50) NULL, 
    
        Rootkey integer NULL, 
    

    我需要添加一个“);”并删除表格两端的逗号',,使其看起来像:

    CREATE TABLE address(
    
        location_pk integer NULL,
    
        City varchar(50) NULL, 
    
        Address1 varchar(50) NULL, 
    
        Address2 varchar(50) NULL ); 
    
    CREATE TABLE name(
    
        idinteger NULL,
    
        City varchar(50) NULL, 
    
        RootDCTKey integer NULL, 
    
        Class varchar(50) NULL );
    
    CREATE TABLE location(
    
        location_pk integer NULL,
    
        City varchar(50) NULL, 
    
        Rootkey integer NULL );
    

    我的方法是将文件的更正版本写入另一个文件

    opFile1 = open('txtfile.txt','rb').readlines()
    finalfile = open('finaltxtfile.txt','wb')
    
    for i,line in enumerate(opFile1):
    
        if not line.startswith('CREATE TABLE'):
            finalfile.write(line)
        else:
            #overwrite the last written line with the corrected line
            finalfile.write(opFile1[i-2].rstrip(',')+' );')
    
            #write the original 'CREATE TABLE' line
            finalfile.write(line)
    

    3 回复  |  直到 7 年前
        1
  •  2
  •   officialaimm    7 年前

    希望这有帮助。对于每一行,借助枚举索引,检查下一行是否以开头 CREATE (我已经创建了它,您可以根据需要修改字符串)。如果是,则进行更换 line.replace(',',');') or i+1==len(opFile1) . 这个 i+2<len(opFile1)

    opFile1 = open('txtfile.txt','r').readlines()
    finalfile = open('finaltxtfile.txt','w')
    
    for i,line in enumerate(opFile1):
        if i+2<len(opFile1) and opFile1[i+2].startswith('CREATE') or i+1==len(opFile1):
            finalfile.write(line.replace(',',');'))
        else:
            finalfile.write(line)
    finalfile.close()
    

    顺便说一句,你使用的是二进制模式 rb , wb 为了编写不必要的字符串,我将其更改为正常模式 r w

        2
  •  1
  •   Mike    7 年前

    如果文件不是很大,我就不会费心处理每一行。我只需将整个文件读入一个变量,在最后一个逗号上进行查找/替换,然后将变量写入一个新文件(或原始文件)。

        3
  •  1
  •   fernandezcuesta    7 年前

    re

    finalfile.write(re.sub(b'NULL,(\s*\n*)(CREATE|\Z)', rb'NULL);\1\2', opFile1))