Python笔记5之实例:批量删除文本空行和多文件合并

实例背景是:

最近想练听力了,光听不明白呀,必须要看中文解释才能明白啊(虽然六级过了,可还是哑巴英语啊,汗!)。

电子版不习惯,为了不浪费纸张打印,就想到了把所有的翻译合成一个文件打印,合并的文件自然要去掉空格了。

既然是程序员,自然不能纯手工了,于是就有了下面这段代码。

  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()

运行结果如下:

感觉上面代码中有可以优化的地方,请高手指正了。

posted @ 2011-09-21 13:22  AlanWang  阅读(3356)  评论(0编辑  收藏  举报