結合下面的代碼學習相關模塊及函數方法的使用
#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:\testDemoCode'): 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:\123\456\test
.txt
將一個路徑名分解為目錄名和文件名兩部分
fpath , fname = os.path.split( "你要分解的路徑")
例如:
a, b = os.path.split( "c:\\123\\456\\test.txt" )
print a
print b
顯示:
c:\123\456
test.txt