代码加行号打印


直接在终端显示文件的话是没有行数标记的,比如:

view plaincopy to clipboardprint?
$ cat a.c 
#include <stdio.h>  
int main(int argc, const char *argv[]) 

    printf("Hello, world!\n"); 
    return 0; 

$  
$ cat a.c
#include <stdio.h>
int main(int argc, const char *argv[])
{
 printf("Hello, world!\n");
 return 0;
}
$

用下面的脚本可以打印行数,原理是首先统计行数,然后计算需要显示的行数的宽度,再一边读取行一边打印,打印的同时在行首通过右对齐的方式插入行号。

view plaincopy to clipboardprint?
#!/usr/bin/env python  
import sys 
def print_code(pathname): 
    line_count = 0 
    f = open(pathname) 
    s = f.readline() 
    while s: 
        line_count += 1 
        s = f.readline() 
    align = len(str(line_count)) + 1 
    f.seek(0) 
    line_num = 1 
    s = f.readline() 
    print str(line_num).rjust(align), s, 
    while s: 
        line_num += 1 
        s = f.readline() 
        print str(line_num).rjust(align), s, 
    f.close() 
if __name__ == '__main__': 
    if len(sys.argv) == 1: 
        print "usage : " + sys.argv[0] + " <file>" 
    for i in range(1, len(sys.argv)): 
        print_code(sys.argv[i]) 
#!/usr/bin/env python
import sys
def print_code(pathname):
    line_count = 0
    f = open(pathname)
    s = f.readline()
    while s:
        line_count += 1
        s = f.readline()
    align = len(str(line_count)) + 1
    f.seek(0)
    line_num = 1
    s = f.readline()
    print str(line_num).rjust(align), s,
    while s:
        line_num += 1
        s = f.readline()
        print str(line_num).rjust(align), s,
    f.close()
if __name__ == '__main__':
    if len(sys.argv) == 1:
        print "usage : " + sys.argv[0] + " <file>"
    for i in range(1, len(sys.argv)):
        print_code(sys.argv[i])
使用效果:

view plaincopy to clipboardprint?
$ python codenum.py a.c 
 1 #include <stdio.h>  
 2 int main(int argc, const char *argv[]) 
 3 { 
 4  printf("Hello, world!\n"); 
 5  return 0; 
 6 } 
 7  
$  
$ python codenum.py a.c
 1 #include <stdio.h>
 2 int main(int argc, const char *argv[])
 3 {
 4  printf("Hello, world!\n");
 5  return 0;
 6 }
 7
$


 作者“雨婷的专栏”
 

相关内容

    暂无相关文章

评论关闭