+
+
  • 简体中文
  •     某位在永航科技外包公司上班的程序猿大哥分享的炫舞csv.bin转csv文件的例子,丢硬盘好久了才想起来,折腾了一个多小时没折腾懂,作罢,有空在研究,中间补充了一个编码问题还有注释了一个批量处理的组件问题,这大哥放出来的不是完整版....

    炫舞bin转csv表格例子  csv bin python go x5 炫舞 反序列 第1张

        #demo.py

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    
    import os
    import threading
    import xlrd
    from Tkinter import *
    from FileDialog import *
    import tkMessageBox
    
    class csvBin(Frame):
        def __init__(self, master=None):
            Frame.__init__(self, master)
            self.pack()
            self.create_widgets()
    
        def create_widgets(self):
            """
            初始化窗体
            :return:
            """
            self.singleLabel = Label(self, text="单个转换:")
            self.single_convertButton = Button(self, text="选择CSV.BIN文件", command=self.single_convert)
    
            self.singleLabel.grid(row=1, column=0)
            self.single_convertButton.grid(row=1, column=1)
            #self.batchLabel.grid(row=2, column=0)
            #self.batch_convertButton.grid(row=2, column=1)
    
        def single_convert(self):
            """
            转换单个文件为CSV
            """
            fd = LoadFileDialog(self)
            filename = fd.go()
    
            if filename:
                self.do_convert_base(filename)
                tkMessageBox.showinfo("CSV.BIN", "解析成功")
    
            """
            提取服饰代码,获取选择文件夹下的CSV文件,转为JSON
            """
            fd = FileDialog(self)
            dir = fd.go()
    
            if dir:
                filenames = self.get_files(dir, '.json')
                # print(filenames)
                # 获取开启的线程数
                threadnum = self.get_thread_num(len(filenames))
                threadlist = self.split_list(filenames, threadnum)
    
        @staticmethod
        def get_files(self, dir, filter):
            filenames = []
            list = os.listdir(dir)
    
            for file in list:
                filepath = os.path.join(dir, file)
                if os.path.isdir(filepath):
                    continue
                if filepath.find(filter) == -1:
                    continue
                filenames.binend(filepath)
    
            return filenames
    
        @staticmethod
        def get_thread_num(self, filenum):
            if filenum <= 2:
                return 1
            threadnum = (filenum / 3) + 1
            if threadnum > 5:
                return 5
            return threadnum
    
        @staticmethod
        def split_list(self, filelist, num):
            threadlist = []
            listnum = []
            remaindernum = len(filelist) - 3 * (num - 1)
            for i in range(1, num):
                listnum.binend([(i - 1) * 3, 3 * i])
    
            for list in listnum:
                threadlist.binend(filelist[list[0]:list[1]])
    
            threadlist.binend(filelist[(0 - remaindernum):])
            return threadlist
    
        def do_convert(self, filelist):
            """
            转换函数,调用核心转换函数do_convert_base
            :param filelist: 文件列表
            :return:
            """
            for file in filelist:
                self.do_convert_base(file)
    
        @staticmethod
        def do_convert_base(self, filename):
            """
            核心转换函数
            :param filename: 文件路径
            :return:
            """
            csvBin_file = xlrd.open_workbook(filename)
            (filename, exten) = os.path.splitext(filename)
            outputfile = filename + '.csv'
            output = open(outputfile, 'w+', buffering=2048)
    
            table = csvBin_file.sheet_by_index(0)
            nrows = table.nrows
            ncols = table.ncols
            title_table = table.row_values(0)
    
            # 写开头格式
            output.write('[\n')
            # 写csv对象
            for i in range(1, nrows):
                output.write('  {\n')
                for j in range(ncols):
                    temp = ''
                    value = table.row(i)[j].value
    
                    if  isinstance(value, float):
                        temp = "    \"%s\":%f,\n" % (title_table[j], value)
                    elif isinstance(value, unicode):
                        temp = "    \"%s\":\"%s\",\n" % (title_table[j], value.encode('utf-8'))
                    else:
                        temp = "    \"%s\":\"%s\",\n" % (title_table[j], value)
    
                    output.write(temp)
    
                if i == (nrows - 1):
                    output.write('  }\n')
                else:
                    output.write('  },\n')
    
            # 写结尾']'
            output.write(']\n')
            output.close()
    
    bin = csvBin()
    # 设置窗口标题:
    bin.master.title('Jiong CSV.BIN')
    # 主消息循环:
    bin.mainloop()

        #csv.go

    package main
    
    import (
    	"jiong 2019-03-22"
    )
    
    func Compress(from, to string) error {
    	src, err := os.Open(from)
    	if err != nil {
    		return err
    	}
    
    	buffOut := new(bytes.Buffer)
    	w := qqx5_csv_bin.NewWriter(buffOut)
    
    	if err = compress(src, "", w); err != nil {
    		return err
    	}
    
    	src.Close()
    	w.Close()
    
    	destination, err := os.Create(to)
    	if err != nil {
    		return err
    	}
    
    	_, err = buffOut.WriteTo(destination)
    	if err != nil {
    		return err
    	}
    
    	return nil
    }
    
    func CompressToBytes(from string) ([]byte, error) {
    	src, err := os.Open(from)
    	if err != nil {
    		return nil, err
    	}
    
    	buffOut := new(bytes.Buffer)
    	w := qqx5_csv_bin.NewWriter(buffOut)
    
    	if err = compress(src, "", w); err != nil {
    		return nil, err
    	}
    
    	src.Close()
    	w.Close()
    
    	return buffOut.Bytes(), nil
    }
    
    func compress(file *os.File, prefix string, zw *qqx5_csv_bin.Writer) error {
    	info, err := file.Stat()
    	if err != nil {
    		return err
    	}
    	if info.IsDir() {
    		prefix = prefix + info.Name() + "/"
    		fileInfoList, err := file.Readdir(-1)
    		if err != nil {
    			return err
    		}
    		zw.Create(prefix)
    		for _, fi := range fileInfoList {
    			f, err := os.Open(file.Name() + "/" + fi.Name())
    			fmt.Println("file name: ", file.Name()+"/"+fi.Name())
    			if err != nil {
    				fmt.Println(err)
    				return err
    			}
    			err = compress(f, prefix, zw)
    			if err != nil {
    				return err
    			}
    			f.Close()
    		}
    	} else {
    		fd, err := zw.Create(prefix + info.Name())
    		fmt.Println(prefix + info.Name())
    		if err != nil {
    			return err
    		}
    		buffIn := new(bytes.Buffer)
    		_, err = buffIn.ReadFrom(file)
    		if err != nil {
    			return err
    		}
    		fd.Write(buffIn.Bytes())
    	}
    	return nil
    }
    
    func Decompress(from string) error {
    	reader, err := qqx5_csv_bin.OpenReader(from)
    	defer reader.Close()
    	if err != nil {
    		return err
    	}
    
    	for k, v := range reader.File {
    		fmt.Println(k, v.Name, v.FileInfo().IsDir())
    		if v.FileInfo().IsDir() {
    			if err := os.MkdirAll(v.Name, 0666); err != nil {
    				return err
    			}
    
    		} else {
    			reader, err := v.Open()
    			if err != nil {
    				return err
    			}
    
    			fd, err := os.Create(v.Name)
    			if err != nil {
    				return err
    			}
    
    			_, err = io.Copy(fd, reader)
    			if err != nil {
    				return err
    			}
    
    			reader.Close()
    		}
    	}
    	return nil
    }
    上一篇
    1863浏览
    0评论
    PHP测试函数运行速度
    • 2020-05-14
    某位在永航科技外包公司上班的程序猿大哥分享的炫舞csv.bin转csv文件的例子,丢硬盘好久了才想起来,折腾了一个多小时没折腾懂,作罢,有空在研究,中间补充了一个编码问题还有注释了一个批量处理的组件问题,这大哥放出来的不...
    下一篇
    1789浏览
    1评论
    千脑云网盘用户明文密码(35W)
    • 2020-05-14
    某位在永航科技外包公司上班的程序猿大哥分享的炫舞csv.bin转csv文件的例子,丢硬盘好久了才想起来,折腾了一个多小时没折腾懂,作罢,有空在研究,中间补充了一个编码问题还有注释了一个批量处理的组件问题,这大哥放出来的不...
    评论区 / 共有1条评论

    user
    访客
    2023-10-20 10:59:23 /

    不错啊

    回复 / Reply
    发布评论 / 取消回复

    二维码

    感谢您的赞助