结合下面的代码学习相关模块及函数方法的使用
#coding:utf-8 #导入相应模块 import csv import xlwt import sys import os import fnmatch #另存为文件名 def ex_file(mycsvfile): csvfile = open(mycsvfile,"rb") #csvfile = open("test.csv","rb") #新建excel文件 myexcel = xlwt.Workbook() #新建sheet页 mysheet = myexcel.add_sheet("data") #获取csv的文件绝对路径及文件名不包括后缀,
及os.path.splitext(“文件的绝对路径”)
返回的是一个含有两个元素的列表,
portion[0]是包含文件名的值,portion[1]是“.后缀” portion = os.path.splitext(mycsvfile) #读取文件信息 reader = csv.reader(csvfile) l = 0 #通过循环获取单行信息 for line in reader: r = 0 #通过双重循环获取单个单元信息 for i in line: #通过双重循环写入excel表格 mysheet.write(l,r,i) r=r+1 l=l+1 #最后保存到excel,以原有文件名保存,更换后缀 myexcel.save(portion[0]+".xls") print portion[0] + '.xls' +u"保存成功!" #文件路径处理函数 def iterfindfiles(path, fnexp): #os.walk() 函数返回三个函数,root就是path的的路径本身及 其下所有文件夹的路径了,
dir是path下面的文件夹名,没有就是一个空列表[],files是path以及path下的文件夹下的文件列表集合 #这样相当于遍历了path路径下的所有文件,这些可以通过print 他们的返回值来查看 for root, dirs, files in os.walk(path): #fnmatch.filter(,) 返回值是得到的后缀为fnexp的文件 列表信息。
即在文件名包括后缀的files列表中匹配后缀为fnexp参数值的文件组成新的列表赋值给filename for filename in fnmatch.filter(files, fnexp): #root为当前遍历时的路径,这里的os.path.join()方法是件root路径和filename拼接为文件的绝对路径 #yield 是为函数iterfindfiles()的返回值追加数据的有迭代的意思,每次循环就返回一个返回值,一直追加返回 yield os.path.join(root, filename) #批量处理 if __name__=="__main__": #输入要转换文件的路径 path=raw_input("Please enter a path:") #数据要转换文件的文件名因为是批处理,所以使用通配符 “*”号 “*.csv” 表示目标路径下的所有csv格式文件 fnexp=raw_input("Please enter a fnexp:") #调用文件处理函数 for filename in iterfindfiles(path, fnexp): #filename 是接收返回值列表的,返回一个值调用一次ex_file()函数,并把返回值作为参数 ex_file(filename) raw_input ('please enter to exit')
代码中用到的函数说明
1、os.walk(path)
import os for root, dirs, files in os.walk(r'D: estDemoCode'): print root #当前遍历到的目录的根 print dirs #当前遍历到的目录的根下的所有目录的名称,存储到列表中 print files #当前遍历到的目录的根下的所有文件名包括后缀,存储到列表中
2、fnmatch.filter(files, fnexp)
在files文件列表中匹配后缀为fnexp的文件,并把匹配到的结果返回到一个列表中
3、os.path.join(root, filename)
把文件名filename和文件路径root拼接在一起作为一个整体
4、yield
yield相当于一个迭代器,会把返回值一个一个的返回给主函数
5、os.path.splitext(mycsvfile) && os.path.split("文件名称")
分解文件的绝对路径和扩展名的到的是一个列表[]
fpathandname , fext = os.path.splitext( "你要分解的路径")
例如:
a, b = os.path.splitext( "c:\123\456\test.txt" )
print a
print b
显示:
c:123456 est
.txt
将一个路径名分解为目录名和文件名两部分
fpath , fname = os.path.split( "你要分解的路径")
例如:
a, b = os.path.split( "c:\123\456\test.txt" )
print a
print b
显示:
c:123456
test.txt