python:打印彩色字符串不能正常工作

时间:2015-10-25 08:57:21

标签: python regex python-2.7 colors

我有简单的python脚本来读取文件并逐行打印,其中注释(以#开头的行)以彩色打印

cat file.txt
# asdf
1234

我的python代码:

for ln in file
    if COMMENT.match(ln):
        print "%s%s%s" % ('\033[01;32m', ln, '\033[0m'),
    else:
        print ln,

现在,奇怪的是,虽然正则表达式匹配和着色本身工作正常,但print在某种程度上表现,我无法解释。这是印刷品:

# asdf
 1234

第一行打印为绿色,但请注意下一行中的一个额外空格字符,添加到1234前面。每当前一行被着色时,就会添加这个额外的空间。

这个额外空间来自哪里,我该如何摆脱它呢?

为了完整性,这是我在代码段中使用的re.compile表达式。但这似乎工作正常。

COMMENT = re.compile(r'^#.*$')

作为旁注:

我选择了正确的着色方法吗?或者有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

您的专线包含换行符,但您使用print ,来阻止print添加额外的换行符。但是,,会添加空格,所以最后每次打印line\n<space>,在下一个之前插入一个空格。

不使用,,而是从ln移除换行符,并print添加一行:

for ln in file:
    ln = ln.rstrip('\n')
    if COMMENT.match(ln):
        print "%s%s%s" % ('\033[01;32m', ln, '\033[0m')
    else:
        print ln

答案 1 :(得分:1)

对于这个简单的工作,不需要使用regex。你可以使用str.startswith

试试这个:

with open("yourFile") as file:
    for line in file:
        line = line.rstrip("\n")
        if line.startswith("#"):
            print "%s%s%s" % ('\033[01;32m', line, '\033[0m')
        else:
             print line