设为首页 收藏本站
查看: 907|回复: 0

[经验分享] Python笔记5之实例:批量删除文本空行和多文件合并

[复制链接]

尚未签到

发表于 2015-4-27 12:22:19 | 显示全部楼层 |阅读模式
  实例背景是:
  最近想练听力了,光听不明白呀,必须要看中文解释才能明白啊(虽然六级过了,可还是哑巴英语啊,汗!)。
  电子版不习惯,为了不浪费纸张打印,就想到了把所有的翻译合成一个文件打印,合并的文件自然要去掉空格了。
  既然是程序员,自然不能纯手工了,于是就有了下面这段代码。



  1 # -*- coding: utf-8 -*-
  2 # Filename: DelBlankLine.py
  3
  4 import os
  5 import sys
  6
  7 reload(sys)
  8 sys.setdefaultencoding('utf8')
  9
10 def DelBlankLineInFile(infile, isOverwrite):
11     '''delete blank lines of single file
12     
13     infile is source file'''
14     isOverwrite = isOverwrite.upper()
15
16     dir = os.path.dirname(infile)
17     oldbasename = os.path.basename(infile)
18     newbasename = oldbasename + '-new'
19     extname = os.path.splitext(infile)[1]
20     outfile = dir+'\\' + newbasename + extname
21                 
22     infp = open(infile, "r")
23     outfp = open(outfile, "w")
24     lines = infp.readlines()
25     for line in lines:
26         #print type(line)
27         if line.split():
28             outfp.writelines(line)
29     infp.close()
30     outfp.close()
31     
32     if isOverwrite == 'Y':
33         #print 'remove',infile
34         os.remove(infile)
35         os.rename(outfile, infile)
36         outfile = infile
37     
38     #print 'read %s'%infile, 'and save as %s'%outfile
39     print 'read %s and save as %s'%(infile, outfile)
40     
41 def DelBlankLineInFolders():
42     """delete blank lines of all files in target path
43     
44     XXXXXXXXXXXXXXXXX"""
45     str = u'请输入目标文件夹路径====>'
46     inpath = raw_input(str.encode('gbk'))
47     str = u'您输入是:' + inpath
48     print str
49     
50     str = u'是否覆盖源文件(Y/N)'
51     isOverwrite = raw_input(str.encode('gbk'))
52     isOverwrite = isOverwrite.upper()
53     str = u'您的选择是:' + isOverwrite
54     print str
55         
56     for (path,dirs,files) in os.walk(inpath):
57         for file in files:            
58             infile = os.path.join(path, file)
59             #print infile
60             DelBlankLineInFile(infile, isOverwrite)
61            
62     if isOverwrite == 'Y':
63         str = u'是否执行文件合并操作(Y/N)'
64         isMerged = raw_input(str.encode('gbk'))
65         isMerged = isMerged.upper()
66         str = u'您选择的是:' + isMerged
67         print str
68         
69         if isMerged == 'Y':
70             mergedfile = os.path.join(inpath, 'MergedFile.txt')
71             infiles = []
72             for (path,dirs,files) in os.walk(path):
73                 for file in files:
74                     infiles.append(os.path.join(path, file))
75            
76             MergeFiles(infiles, mergedfile)      
77
78 def MergeFiles(infiles, outfile):
79     """Merge infiles to one outfile
80     
81     infiles indicate input file list
82     outfile is merged file"""
83     outfp = open(outfile, 'a')
84
85     for file in infiles:
86         filename = os.path.split(file)[1]
87         #print filename
88         #print file
89         outfp.write('***' + filename + '***\n')
90         
91         infp = open(file, 'r')
92         for line in infp.readlines():
93             outfp.write(line)
94         infp.close()
95         outfp.write('\n')
96
97     outfp.close()
98
99     print '***Merge file list***'
100     no = 0
101     for file in infiles:
102         no += 1
103         print 'No.%d'%no, file
104     print 'Merged File:%s'%outfile
105     print '*********************'
106
107         
108
109            
110 if __name__ == "__main__":
111     str = u'1   删除指定目录下所有文件中的空行(包括子目录)'
112     print str
113     str = u'2   删除指定文件中的所有空行'
114     print str   
115     str = u'请输入数字编号====>'
116     index = int(raw_input(str.encode('gbk')))
117     
118     if index == 1:
119         DelBlankLineInFolders()
120     elif index ==2:
121         str = u'请输入目标文件路径====>'
122         infile = raw_input(str.encode('gbk'))
123         str = u'您输入是:' + infile
124         print str
125         
126         str = u'是否覆盖源文件(Y/N)'
127         isOverwrite = raw_input(str.encode('gbk'))
128         str = u'您的选择是:' + isOverwrite.upper()
129         print str
130                 
131         DelBlankLineInFile(infile, isOverwrite)
132     else:
133         str = u'编号输入错误,程序退出'
134         print str
135         sys.exit()
136         
137     raw_input("press Enter to exit")
138     sys.exit()   
  运行结果如下:
DSC0000.png
  感觉上面代码中有可以优化的地方,请高手指正了。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-61223-1-1.html 上篇帖子: 黄聪:Python+NLTK自然语言处理学习(三):计算机自动学习机制 下篇帖子: 用Python实现简单的HTTP服务器(1)--使用Firebug简单分析HTTP协议
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表