lx86 发表于 2015-4-27 12:22:19

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)
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)
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()   
  运行结果如下:

  感觉上面代码中有可以优化的地方,请高手指正了。
页: [1]
查看完整版本: Python笔记5之实例:批量删除文本空行和多文件合并