python:打印彩色字符串无法正常工作

python:打印彩色字符串无法正常工作,python,regex,python-2.7,colors,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的行为在某种程度

我有一个简单的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
expression。但这似乎效果不错

COMMENT = re.compile(r'^#.*$')
作为旁注:


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

您的行包含一个换行符,但您使用
print
来防止
print
添加额外的换行符。但是,
会添加一个空格,因此最后每次打印
行\n
,在下一行之前插入空格

不要使用
,而是从
ln
中删除换行符,并让
打印
添加一行:

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

对于这个简单的作业,无需使用
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

您删除了
,但没有删除额外的换行符。正则表达式可能比一开始就匹配
#
要复杂得多(例如,它可能允许空白)。@MartijnPieters添加了strip以删除换行符,代码现在可以正常工作了,我检查了,但开始处的空白可能很重要。如果这是Python代码,您刚刚删除了缩进。@Hackaholic-谢谢您的建议,
line.startswith(“#”)
比正则表达式匹配要简单得多。@MartijnPieters但如果您看到注释regex re.compile(r'^#.*'),它以锚点开头,因此#将处于行状态,我认为你建议的解决方案不会在评论栏中留下空白。谢谢但我仍然不明白为什么要添加空格字符。为什么只在第一次打印,而不是第二次打印。请你解释一下,或者告诉我在哪里可以读到这篇文章好吗?@MartinVegter:
print
每次使用
print…,
时都会添加它,并且没有向stdout写入任何其他内容。因此,
print'foo',
然后
print'bar'
将在
'bar'
前面添加一个空格,因为前面的
print
使用了逗号。