批量处理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

 

posted @ 2015-08-27 00:42  Blue●Sky  阅读(4296)  评论(0编辑  收藏  举报