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



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

cat file.txt
# asdf
1234
我的python代码:
for ln in file
    if COMMENT.match(ln):
        print "%s%s%s" % ('33[01;32m', ln, '33[0m'),
    else:
        print ln,

现在,奇怪的是,虽然正则表达式匹配和着色本身工作得很好,但print的行为方式,我无法解释。这就是打印出来的内容:

# asdf
 1234

第一行被打印为绿色,但请注意下一行的一个额外的空格字符,添加在1234前面。

这些多余的空间是从哪里来的,我怎么才能去掉它?

为了完整起见,下面是我在代码片段中使用的re.compile表达式。但这似乎工作得很好。

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

作为旁注:

我是否选择了正确的着色方法?还是有更好的方法?

您的行包含一个换行符,但是您使用print,来防止print添加额外的换行符。然而,,添加了一个空格,所以最后每次打印linen<space>,在下一个之前插入一个空格。

不使用,,从ln中删除换行符,并让print添加一个:

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

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

试试这个:

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

最新更新