首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >替换字符串中的特定控制/不可打印字符

替换字符串中的特定控制/不可打印字符
EN

Stack Overflow用户
提问于 2019-05-20 01:48:59
回答 1查看 32关注 0票数 0

我正在编写一个读取sql文件并使用cx_Oracle执行这些文件的脚本。一些文件仅在每个sql操作符和关键字之间使用空格,而其他文件则使用换行符和制表符作为空格。我正面临着后者的问题。例如,此部分返回以下内容:

代码语言:javascript
复制
NON_PRINTABLE = """\r\n\t"""
def parseSQLFile(filename):
    with open(filename, 'r') as sqlFile:
        allSQL = sqlFile.read()
        #filteredSQL = filter(lambda ln: ln in string.printable, allSQL)
        # replace specific control characters with spaces to prevent sql compiler errors
        for char in NON_PRINTABLE:
            allSQL.replace(char,' ')


    return allSQL

我已经尝试使用filter函数、translate和replace;但是,我仍然从以下输入中获得了以下不同的结果:

输入:

'select\n\ts.id\n\t,s.src_cnt\n\t,s.out_file\t\nfrom\n\tkpi_index_ros.composites s\n\t,其中\n\t1=1\n\t和s.kpi_index_rosoard_id (+) = d.id\n\tand d.active = 1\n;‘

输出1:

‘'select\n s.id\n,s.src_cnt\n,s.out_file \n nfrom\n kpi_index_ros.composites s\n,kpi_index_ros.kpi_index_rosoards d\n nwhere\n 1= 1\n kpi_index_ros.kpi_index_rosoards s.kpi_index_rosoard_id (+) = d.id\n d.active = 1\n;’

输出2:

‘'select \ts.id \t,s.src_cnt \t,s.out_file\t from \tkpi_index_ros.composites s \t,kpi_index_ros.kpi_index_rosoards d where \t1 =1\t和s.kpi_index_rosoard_id (+) = d.id \t和d.active =1 ;’

它似乎会替换制表符或换行符,但不会同时替换两者。有没有办法以一种高效的方式实现这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-20 02:05:11

进行以下更改(将allSQL值替换为String对象的.replace方法的输出)将生成所需的输出:

代码语言:javascript
复制
NON_PRINTABLE = """\r\n\t"""
def parseSQLFile(filename):
    with open(filename, 'r') as sqlFile:
        allSQL = sqlFile.read()
        # replace specific control characters with spaces to prevent sql compiler errors
        for char in NON_PRINTABLE:
            allSQL = allSQL.replace(char,' ') #updating allSQL with returned value

    return allSQL

输出:

代码语言:javascript
复制
'select  s.id  ,s.src_cnt  ,s.out_file  from  kpi_index_ros.composites s  ,kpi_index_ros.kpi_index_rosoards d where  1 = 1  and s.kpi_index_rosoard_id (+) = d.id  and d.active = 1 ;'

在您的问题的第二部分-关于这种方法的效率,您可能应该参考benchmark results in this answer

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56210461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档