首页 / PYTHON / 逐步实现python版wc命令
逐步实现python版wc命令
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了逐步实现python版wc命令,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含7629字,纯文字阅读大概需要11分钟。
内容图文
1 # !/usr/bin/env python 2 # _*_ coding:UTF-8 _*_ 3 4 import sys 5 6 # 遍历文件对象,并统计行数 7 def lineCount(f): 8 n = 0 9for i in f: 10 n += 1 11return n 1213 input = sys.stdin 14print(lineCount(input)) 15
1 while True: 2 ....: data = fd.readline() 3 ....: ifnot data: 4 ....: break5 ....: print(data)
1 import sys 2 import time 3 4 for i in range(10): 5 sys.stdout.write(‘>‘) #当然这里加上\n就会一个一个输出,因为sys.stdout是正行正行输出(加\n,就类似于print了)6 sys.stdout.flush() #强制i刷新到stdout中去7 time.sleep(1)
1 # !/usr/bin/env python 2 import sys 3 data = sys.stdin.read() 4 chars = len(data) 5 words = len(data.split()) 6 lines = data.count(‘\n‘) 7print(‘%s %s %s ‘ % (lines,words,chars)) #传统的字符串替换8print(‘%(lines)s %(words)s %(chars)s‘ % locals()) #高级用法,%(key)s,表示格式化关键字替换,后面就需要以字典的方式传入对应的key值,而locals(),表示当前环境下所有的变量和值的字典,所以这里可以进行替换9print(‘%(lines)s %(words)s %(chars)s‘ % {‘lines‘:lines,‘words‘:words,‘chars‘:chars}) 这种方法和上面利用locals的方式是一样的,只不过locals的变量更多而已
1 # !/usr/bin/env python 2 import sys,os 3 4 if len(sys.argv) == 1: 5 data = sys.stdin.read() 6else: 7try: 8 filename = sys.argv[1] 9except IndexError as e: 10 sys.exit(‘The %s need one parameter‘ % __file__) 1112if os.path.exists(filename): 13try: 14 fd = open(filename) 15 data = fd.read() 16 fd.close() 17except IOError as e: 18 sys.exit(‘The Parameter is a file,not a Directory‘) 19else: 20 sys.exit(‘The %s is not exist‘ % filename) 2122 chars = len(data) 23 words = len(data.split()) 24 lines = data.count(‘\n‘) 2526print(‘%(lines)s %(words)s %(chars)s‘ % locals())
1 # !/usr/bin/env python 2 # Author:Lee Sir 3 4 import sys 5 from optparse import OptionParser #导入optparser模块中的OptionParser类 6 7 parser = OptionParser() #实例化一个OptionParser类的对象parser,这里括号里可以添加一些提示信息,用户在执行help时输出(%prog表示脚本名称。例子:%prog [ -c| -l | -d] [file1]) 8 parser.add_option(‘-c‘,‘--char‘,dest=‘chars‘,action=‘store_true‘,default=False,help=‘only user to count chars‘) 910#add_option 表示添加一个选项,-c为选项名称,--char为对应的长选项(可选),dest 表示在程序内引用该变量时的名称,action表示参数后面是否有值(有的话store,没有的话store_true/store_false),default表示该参数默认是添加还是不添加,help(执行-help会显示的内容)11 parser.add_option(‘-w‘,‘--word‘,dest=‘words‘,action=‘store_true‘,default=False,help=‘only user to count words‘) 12 parser.add_option(‘-l‘,‘--line‘,dest=‘lines‘,action=‘store_true‘,default=False,help=‘only user to count lines‘) 1314#parse_args() 会返回一个元组,第一个元素为对象,存储着参数的使用情况,第二个为列表,存储着参数对应的值。(注意,第一个元素为对象,呈现形式很像字典,但不能用字典的方式读取,只能使用option.dest来读写)15 options,args = parser.parse_args() 1617#默认参数,当同时没有-c,-l,-w时,设置这三个参数都是True18ifnot (options.chars or options.words or options.lines): 19 options.chars,options.words,options.lines = True,True,True 2021 data = sys.stdin.read() 22 chars = len(data) 23 words = len(data.split()) 24 lines = data.count(‘\n‘) 2526if options.chars: #脚本后添加了-c,则option.chars = True27print(chars,end=‘\t‘) 28if options.words: 29print(words,end=‘\t‘) 30if options.lines: 31print(lines) 32
添加判断完善脚本:
os.Path对文件路径的处理
os.path.isdir 判断是否是目录
os.path.isfile 判断是否是文件
1 # !/usr/bin/env python 2 3 import os,sys 4 from optparse import OptionParser 5def opt(): 6‘Get Command line parser‘ 7 parser = OptionParser() 8 parser.add_option(‘-c‘,‘--char‘,dest=‘chars‘,action=‘store_true‘,default=False,help=‘used to count chars‘) 9 parser.add_option(‘-w‘,‘--word‘,dest=‘words‘,action=‘store_true‘,default=False,help=‘used to count words‘) 10 parser.add_option(‘-l‘,‘--line‘,dest=‘lines‘,action=‘store_true‘,default=False,help=‘used to count lines‘) 11 option,args = parser.parse_args() 12return option,args 1314def get_count(data): 15‘count for lines ,words or chars‘16 chars = len(data) 17 words = len(data.split()) 18 lines = data.count(‘\n‘) 19return lines,words,chars 2021def print_wc(option,lines,words,chars,filename): 22‘print lines,words or chars‘23if option.lines: 24print lines, 25if option.words: 26print words, 27if option.chars: 28print chars, 29print filename 3031def main(): 32‘main functions‘33 option,args = opt() 34ifnot (option.chars or option.words or option.lines): 35 option.chars , option.words, option.lines = True,True,True 36if args: 37 total_lines,total_words,total_chars = 0, 0, 0 38for filename in args: 39if os.path.isfile(filename): 40 with open(filename) as fd: 41 data = fd.read() 42 lines,words,chars = get_count(data) 43 print_wc(option,lines,words,chars,filename) 44 total_lines += lines 45 total_words += words 46 total_chars += chars 47elif os.path.isdir(filename): 48print >> sys.stderr,‘%s is a directory‘ % filename #利用print写入到文件中去,注意这里仅仅适用于Python 2.x,python3是不支持的(可以用print(i,file=sys.stdout) 或者sys.stdout.write())49else: 50 sys.exit(‘%s : No such file or Directory‘ % filename) 51if len(args) > 1: 52 print_wc(option,total_lines,total_words,total_chars,‘total‘) 53else: 54 data = sys.stdin.read() 55 filename = ‘‘56 lines,words,chars = get_count(data) 57 print_wc(option,lines,words,chars,filename) 585960if__name__ == ‘__main__‘: 61 main()
1 # !/usr/bin/env python 2 3 import os,sys 4 from optparse import OptionParser 5def opt(): 6‘Get Command line parser‘ 7 parser = OptionParser() 8 parser.add_option(‘-c‘,‘--char‘,dest=‘chars‘,action=‘store_true‘,default=False,help=‘used to count chars‘) 9 parser.add_option(‘-w‘,‘--word‘,dest=‘words‘,action=‘store_true‘,default=False,help=‘used to count words‘) 10 parser.add_option(‘-l‘,‘--line‘,dest=‘lines‘,action=‘store_true‘,default=False,help=‘used to count lines‘) 11 parser.add_option(‘-n‘,"--no-total",dest="nototal",action=‘store_true‘,default=False,help=‘not print total‘) 12 option,args = parser.parse_args() 13return option,args 1415def get_count(data): 16‘count for lines ,words or chars‘17 chars = len(data) 18 words = len(data.split()) 19 lines = data.count(‘\n‘) 20return lines,words,chars 2122def print_wc(option,lines,words,chars,filename): 23‘print lines,words or chars‘24if option.lines: 25print lines, 26if option.words: 27print words, 28if option.chars: 29print chars, 30print filename 3132def main(): 33‘main functions‘34 option,args = opt() 35ifnot (option.chars or option.words or option.lines): 36 option.chars , option.words, option.lines = True,True,True 37if args: 38 total_lines,total_words,total_chars = 0, 0, 0 39for filename in args: 40if os.path.isfile(filename): 41 with open(filename) as fd: 42 data = fd.read() 43 lines,words,chars = get_count(data) 44 print_wc(option,lines,words,chars,filename) 45 total_lines += lines 46 total_words += words 47 total_chars += chars 48elif os.path.isdir(filename): 49print >> sys.stderr,‘%s is a directory‘ % filename 50else: 51 sys.exit(‘%s : No such file or Directory‘ % filename) 52if len(args) > 1: 53if not option.nototal:
56 print_wc(option,total_lines,total_words,total_chars,‘total‘) 57else: 58 data = sys.stdin.read() 59 filename = ‘‘60 lines,words,chars = get_count(data) 61 print_wc(option,lines,words,chars,filename) 626364if__name__ == ‘__main__‘: 65 main()
原文:http://www.cnblogs.com/dachenzi/p/6792430.html
内容总结
以上是互联网集市为您收集整理的逐步实现python版wc命令全部内容,希望文章能够帮你解决逐步实现python版wc命令所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。