python 保存csv,多列

举报
IM_STONE 发表于 2022/05/08 00:14:14 2022/05/08
【摘要】 需求:将多个csv文件读取出来,将数据合并到一个csv文件, 1、遍历文件夹,将scv文件存入到列表list1 2、遍历列表list1读取csv文件,将读到的数据存入到二维列表list2 3、开始处理二维...

需求:将多个csv文件读取出来,将数据合并到一个csv文件,
1、遍历文件夹,将scv文件存入到列表list1
2、遍历列表list1读取csv文件,将读到的数据存入到二维列表list2
3、开始处理二维列表:
3.1、因为二维列表里的各个列表长度不一致,首先通过插入空值的方法处理成长度一致的列表
3.2、将列表list2转秩,如果不转秩,将会出现行列交换的现象
3.3、写入到新的csv文件

# coding=utf-8
import pandas as pd
import MySQLdb   
import csv
import random
import pymysql
import pandas as pd
import MySQLdb as mdb
import sys
import time
import os
import numpy as np
import time
import gzip
import datetime

#保存成二维csv
def savecsvfromlisttwo(p_list, p_name):
      m_len =0
      #找到最大长度
      for i in range(len(p_list)):
            tep_len = len(p_list[i])
            if tep_len>m_len:
                  m_len = tep_len
      #把小于最大长度的列表补空值,否则下面转秩的时候会按照最短的来转,会丢失数据
      for i in range(len(p_list)):
            t_len = len(p_list[i])
            for j in range(m_len):
                  if j>t_len:
                        p_list[i].append("")

      #转秩
      L =list(map(list,zip(*p_list)))

      #写入csv  encoding='utf-8-sig'  防止中文乱码
      with open(p_name, 'w', encoding='utf-8-sig', newline='\n') as file_handler:
            file_writer = csv.writer(file_handler)            
            # print(m_list[0])
            file_writer.writerows(L)



def fun1(p_list):
      m_list = []
      for i in range(len(p_list)):
            m_dir  = os.path.dirname(p_list[i]) #输出为 'C:/Users/Desktop/lesson/python'
            m_file = os.path.basename(p_list[i]) #输出为 class1.py

            print("m_dir = ",m_dir)
            print("m_file = ",m_file)

            file_name = os.path.basename(m_file)
            file_name = file_name.split('.')[0]
            print(file_name)

            data1 = np.loadtxt(p_list[i],delimiter=',')
            data1 = data1.tolist()
            print("data1 len = ",len(data1))

            data1.insert(0,file_name)
            #将各个csv文件数据放到二维列表
            m_list.append(data1)
            print(type(data1) , type(m_list))
      savecsvfromlisttwo(m_list , r"D:\3333.csv")


def walkFile_list(file):
    p_list = []
    m_count=0
    for root, dirs, files in os.walk(file):
        for f in files:
            m = os.path.join(root, f)
            ss=os.path.splitext(m)
            a = os.path.basename(m)
            if (".csv" == ss[1]):
                  #获取到所有的csv文件
                  p_list.append(m)
            else:
                pass
    return p_list


def main():
      dir = r"E:\Data"
      m_list = walkFile_list(dir)
      fun1(m_list)

if __name__ =="__main__":
      print("start")
      main()

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90

文章来源: blog.csdn.net,作者:IM-STONE,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/doubleintfloat/article/details/124616776

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。