批量處理csv格式轉換成xls


結合下面的代碼學習相關模塊及函數方法的使用

 

#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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM