繁体   English   中英

在python中编辑文本文件

[英]Editing text file in python

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

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)

这种方法只是将更正的行添加到CREATE TABLE行之前,而不删除原始的错误行。 请帮助您的想法。 谢谢 :)

希望这可以帮助。 对于每一行,借助枚举索引,检查下一行是否以CREATE开头(我将其设置为CREATE,您可以根据需要修改字符串)。 如果是,执行替换line.replace(',',');')并编写该行。 我们还需要替换最后一行; 作为条件将其添加到if as 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()

顺便说一句,您使用的是二进制模式rbwb来编写不必要的字符串,我将其更改为普通模式rw

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

您可以使用re来完成工作:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM