python:打印彩色字符串无法正常工作
我有一个简单的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的行为在某种程度
#
开头的行)以彩色打印
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
使用了逗号。