• Python-修改xls文件示例


    具体想法

    这段时间通过是使用Windows的番茄盒子,效果不错,但是发现其中有些反面还是有些不足。

    • 数据展示阶段太丑,用的库不好
    • 导出的数组为分为三个时间段,原本相连的内容就分开了,让人不舒服。

    为了以后自己能够对这些记录的数据做更好的数据展示优化,我决定自己先对数据进行处理,然后导入数据库库。

    遇到两个问题

    • xls文件无法直接通过open函数打开,需要使用xlwt库进行转换。学习成本有点高

    具体思路如下

    • 使用panda库直接将原xls文件0转化为csv文件1
    • 对文件1的内容格式化输出到文件2
    • 打开文件2合并之前由系统产生的散乱的记录,并输入到文件3

    很浪费存储空间,也浪费时间,但是鉴于这是个人的一个数据量处理,这些内容,忽略不计。反正只是为了满足个人需要。

    详细代码

    # 目的为了xsl文档到csv文档的转换
    import pandas as pd
    import csv
    
    
    def xlsx_to_csv_pd(sourceFile, targetFile):
        """对xls文档进行转化,并且结构进行优化
    
        :param sourceFile: 原文件名
        :param targetFile: 目的文件名
        :return:   无
        """
    
        # 初步格式化
        data_xls = pd.read_excel(sourceFile, index_col=0)
        tempFile = "tempFile.csv"
        data_xls.to_csv(tempFile, encoding='utf-8')
    
        # 格式优化
        lines = open(tempFile, "r", encoding='utf-8').readlines()
        lines = [line.strip() for line in lines]
        total_lines = len(lines)
        line_num = 1
        header = ["data", "startTime", "endTime", "totalTime", "category", "target", "task"]
        data = []
        data.append(header)
        while line_num < total_lines:
            curValues = lines[line_num].split(",")
            curValues[1] = curValues[1][0:10]
            curValues[2] = curValues[2][11:16]
            curValues[3] = curValues[3][11:16]
            del curValues[0]
            data.append(curValues)
            line_num += 1
    
        # 写入文件存储
        with open(targetFile, 'w', newline='', encoding='utf-8') as csvfile:
            writer = csv.writer(csvfile)
            for each_line in data:
                writer.writerow(each_line)
            csvfile.close()
    
    def merge(input_file, output_file):
        """ 将原本的散乱记录进行一定程度的合并
    
        :param input_file:  输入文件
        :param output_file:  输出文件
        :return:
        """
        lines = open(input_file, "r", encoding='utf-8').readlines()
        lines = [line.strip() for line in lines]
    
        total_lines = len(lines)
        line_num = 1
        data = []
        # 判断是否记录散乱
        dictNum = {"07:59": "08:00", "12:59": "13:00", "18:59": "19:00"}
        data.append(lines[0].split(","))
        while line_num < total_lines:
            curValues = lines[line_num].split(",")
            nextNum = line_num + 1
            if nextNum < total_lines:
                nextValues = lines[nextNum].split(",")
                if curValues[4] == nextValues[4] and dictNum.get(curValues[2]) == nextValues[1]:
                    curValues[3] = str(int(curValues[3]) + int(nextValues[3]))
                    del lines[line_num + 1]
                    total_lines = total_lines - 1
            data.append(curValues)
            line_num += 1
    
        with open(output_file, 'w', newline='', encoding='utf-8') as csvfile:
            writer = csv.writer(csvfile)
            for each_line in data:
                writer.writerow(each_line)
            csvfile.close()
    
    
    if __name__ == '__main__':
        xlsx_to_csv_pd("box1.xls", "box1_temp.csv")
        merge("box1_temp.csv", "box1.csv")
    

    经验教训

    list

    • 可以通过类似java方式进行数组的读取。比如一维数组可以采用 list1[0],二维数组可以采用list1[0][0]的方式进行获取
    • list.strip(),如果strip()的参数为空,那么会默认删除字符串头和尾的空白字符(包括 , , 这些)。所以可以对原二维数组除去空格字符

    str

    • 字符串可以通过 == 号进行判断是否相等,无论这个字符串的位置位于何处,即使是在数组中
    • 字符串可以通过s[x:y]的方式返回字符串s在x到y - 1的所有字符的字符串
    • 字符串可以通过int(s)方式转化成字符串,整数类型也可以通过str()方式进行转换成字符类型

    dict

    • 字典可以通过d[key]的方式获取值,也可以通过d.get(key)方式获取值

    字符

    • python 不使用&& || 等方式进行条件的判断
    • 是转义字符,表示换行
  • 相关阅读:
    制作ubuntu容器完整步骤
    linux系统python3安装pip
    ssh连接服务器提示拒绝了密码
    ubuntu中vi编辑中按键错误
    虚拟机ubuntu连不上网
    NOIP2020退役记
    【NOIp2020游记】
    loki简单安装配置使用
    .net下com调用支持x86/x64
    nginx 504 Gateway Time-out
  • 原文地址:https://www.cnblogs.com/Di-iD/p/13785083.html
Copyright © 2020-2023  润新知