1. 要求写一个程序输出指定路径下的所有java文件到一个文本文件中,用java写稍显复杂,于是试了下用python来写,代码如下:
#-*- coding:utf-8 -*- import os for parent,dirnames,filenames in os.walk('/home/xxxx/src'): #遍历src下的文件 for filename in filenames: #循环文件列表 if ".java" in filename: #找出所以后缀是.java的文件 javafile = open(os.path.join(parent,filename)) #得到该文件的绝对路径并打开文件 for line in javafile.readlines(): #读取文件每一行,并循环 if 'package' in line: #行中有‘package’字样 则不输出 print 'Not write package' elif 'import' in line: #行中有‘import’字样 则不输出 print 'Not write import' else: open('myGrep.txt','a').write(line) #将该行写入指定名称为'myGrep.txt'的文件中去
效果还不错,比用java写快捷多了。
参考: http://www.jb51.net/article/15459.htm
http://www.phpfans.net/article/htmls/201004/Mjg0MDAy.html
2. 另外附上一个遍历文件夹下所有文件夹包括文件的方法:
#-*- coding:utf-8 -*- #本功能借助了chardet包来实现探测字符集,并转换成utf-8的编码格式打印输出dir,file到文件 import os,chardet #转码函数,解决了中文显示成了ascii的问题 def _smartcode(stream): """smart recove stream into UTF-8 """ ustring=stream codedetect=chardet.detect(ustring)["encoding"] print codedetect try: print ustring ustring=unicode(ustring,codedetect) print ustring return "%s %s"%("",ustring.encode('utf8')) except: return u"bad unicode encode try!" #主函数,遍历文件夹并输出文件夹和文件的路径信息保存到指定的文本中 for root,dirs,files in os.walk('/home/neptune/Dropbox'): #print root,dirs,files #open('mycd.cdc','a').write("%s %s %s" % (root,dirs,files)) export="\n"+root+"\n" for d in dirs: export+="-d "+root+_smartcode(d)+"\n" for f in files: export+="-f %s %s \n" % (root,_smartcode(f)) export+= "="*70 open('mycd.cdc','a').write(export)
p.s. chardet包需要下载安装。地址是:http://chardet.feedparser.org/download/
p.p.s 在Python中,如果要显示中文字符,简单做法是把字符串先转化为unicode,然后在有unicode对象转化成任意其他系统可显示的编码。