我有简单的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'^#.*$')
作为旁注:
我选择了正确的着色方法吗?或者有更好的方法吗?
答案 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