对Excel、CSV文件的操作

一、C++
1、C++写入CSV文件
float time;
std::ofstream record;
record.open(".../time.csv", std::ios::app);
record << time << std::endl;
record.close();
二、python
1、python写csv、excel文件
import pandas as pd
import numpy as np
import os
from tqdm import tqdm
from openpyxl import Workbook, load_workbook

class Count(object):
    #写入csv文件中
    def WriteCsv(self, data, csv):
        csv_header = [                 #表头
            "No.",
            "value"
        ]
        df = pd.DataFrame([data])
        if os.path.exists(csv):
            df.to_csv(path_or_buf=csv, encoding='utf_8_sig',
                        mode='a', index=False, header=False)    #index为false表示不写入索引
        else:
            df.to_csv(path_or_buf=csv, encoding='utf_8_sig',
                        mode='a', index=False, header=csv_header)

    #写入xlsx文件中
    def WriteXlsx(self, data, excel):
        if os.path.exists(excel):
            wb = load_workbook(excel)
            ws1 = wb.active
            ws1.append(data)
            wb.save(excel)
        else:
            wb = Workbook()     #创建Workbook,并默认创建一个Sheet空表
            ws1 = wb.active     #获取默认的Sheet
            ws1.title = 'Value' #设置Sheet的名字
            excel_header = [
                "No.",
                "value"
            ]
            ws1.append(excel_header)
            ws1.append(data)
            ws2 = wb.create_sheet('Sheet2')        #创建新的Sheet
            ws3 = wb.copy_worksheet(wb['Value'])   #复制Sheet Value
            wb.save(excel)

    def Deal(self, csv, xlsx):
        count = np.zeros(20)
        recorder = []
        i = 1
        j = 0
        for k in tqdm(range(100)):      #显示进度条,引入tqdm需要用 from tqdm import tqdm
            while j < 10:
                recorder.clear()
                recorder.append(i)
                recorder.append(j)
                self.WriteCsv(recorder, csv)
                self.WriteXlsx(recorder, xlsx)
                i = i + 1
                j = j + 1

if __name__ == "__main__":
    count = Count()
    result_path = "/WR/example/Python/Numpy/"
    csv = result_path + "result.csv"
    xlsx = result_path + "result.xlsx"
    count.Deal(csv, xlsx)
2、python读取多个csv文件的指定列写入一个csv文件
import os
import pandas as pd
from tqdm import tqdm
import csv
import re

class Get():
    def WriteCsv(self, data, result):
        csv_header = [                 #表头
            "file_name",
            "No",
            "time",
            "value"
        ]
        df = pd.DataFrame([data])
        if os.path.exists(result):
            df.to_csv(path_or_buf=result, encoding='utf_8_sig',
                        mode='a', index=False, header=False) # index为false表示不写入索引
                        # mode为写入模式,默认为w;a表示只能写,可以不存在,但不能修改原有内容,只能追加
        else:
            df.to_csv(path_or_buf=result, encoding='utf_8_sig',
                        mode='a', index=False, header=csv_header)

    # csv转换为excel
    def csv2excel(self, csv_path, excel_path):
        if os.path.exists(csv_path):
            data_csv = pd.read_csv(csv_path, encoding='utf_8_sig')
            data_csv.to_excel(excel_path, index=False)
            # os.remove(csv_path)   # 会出现问题,还在转的过程中删除导致数据复制不全
        else:
            os.system(r"touch {}".format(path)) # 调用系统命令来创建文件

    # excel转换为csv
    def excel2csv(self, excel_path, csv_path):
        if os.path.exists(excel_path):
            data_excel = pd.read_excel(excel_path, index_col=0) # 0行0列开始
            data_excel.to_csv(csv_path, encoding='utf_8_sig')
            # os.remove(excel_path)

    # 处理csv的行数据
    def DealRow(self, file, file_name, result):
        csv_result = result + ".csv"
        excel_result = result + ".xlsx"
        record = []
        with open(file, 'r') as f:
            reader = csv.reader(f)
            for process in tqdm(reader):        # 进度条
                record.append(file_name)        # 添加对应文件名
                i = 0
                for row in reader:
                    if i >= 58 and i <= 62:
                        if i > 58:
                            record.append('')   # 将新建文件的对应59、60、61、62行的第一列置为空
                        record.append(row[0])   # 获取对应行的第1列
                        record.append(row[1])   # 获取对应行的第2列
                        record.append(row[2])   # 获取对应行的第3列
                        self.WriteCsv(record, result)
                        record.clear()
                    i = i + 1
        self.csv2excel(csv_result, excel_result)

if __name__ == "__main__":
    path = ""
    result_path = ""
    result_name = ""
    get = Get()
    for root, dirs, files in os.walk(path):
        # root 表示当前正在访问的文件夹路径
        # dirs 表示该文件夹下的子目录名列表
        # files 表示该文件夹下的文件列表
        for file in files:
            if file.find('.csv') != -1:
                file_name = file.split(".csv")[0]
                file_name = re.sub('[\u4e00-\u9fa5]', '', file_name)    # 去除中文字符
                get.DealRow(path + "/" + file, file_name, result_path + "/" result_name)
3、python读取文件夹下所有文件
    for root, dirs, files in os.walk(path):
        # root 表示当前正在访问的文件夹路径
        # dirs 表示该文件夹下的子目录名列表
        # files 表示该文件夹下的文件列表
        for file in files:
            if file.find('.csv') != -1:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值