精华内容
下载资源
问答
  • 该代码源码未Python,执行后输入路径,可以对路径下文件进行递归遍历,将遍历结果,文件路径与文件名写入txt中,之后转码未excel
  • Say I have a folder which have multiple excel files with extension xlsx or xls, they share same header column a, b, c, d, e except some empty sheet in several files.I want to iterate all the files and...

    Say I have a folder which have multiple excel files with extension xlsx or xls, they share same header column a, b, c, d, e except some empty sheet in several files.

    I want to iterate all the files and sheets (except for empty sheets) and concatenate them into one sheet of one file output.xlsx.

    I have iterated through all excel files and append them to one file, but how could I iterate through all the sheets of each files if they have more than one sheets?

    I need to integrate two block of code below into one. Thanks for your help.

    import pandas as pd

    import numpy as np

    import glob

    path = os.getcwd()

    files = os.listdir(path)

    files

    df = pd.DataFrame()

    # method 1

    excel_files = [f for f in files if f[-4:] == 'xlsx' or f[-3:] == 'xls']

    excel_files

    for f in excel_files:

    data = pd.read_excel(f)

    df = df.append(data)

    # method 2

    for f in glob.glob("*.xlsx" or "*.xls"):

    data = pd.read_excel(f)

    df = df.append(data, ignore_index=True)

    # save the data frame

    writer = pd.ExcelWriter('output.xlsx')

    df.to_excel(writer, 'sheet1')

    writer.save()

    For one file to concatenate multiple sheets:

    file = pd.ExcelFile('file.xlsx')

    names = file.sheet_names # read all sheet names

    df = pd.concat([file.parse(name) for name in names])

    解决方案import pandas as pd

    path = os.getcwd()

    files = os.listdir(path)

    files

    excel_files = [file for file in files if '.xls' in file]

    excel_files

    def create_df_from_excel(file_name):

    file = pd.ExcelFile(file_name)

    names = file.sheet_names

    return pd.concat([file.parse(name) for name in names])

    df = pd.concat(

    [create_df_from_excel(xl) for xl in excel_files]

    )

    # save the data frame

    writer = pd.ExcelWriter('output.xlsx')

    df.to_excel(writer, 'sheet1')

    writer.save()

    展开全文
  • # 遍历某目录下的Excel文件名字,加入列表 list1 = [] for file in os.listdir(document_path): if file.endswith("xlsx") or file.endswith("xls"): list1.append(file) list1 列表大概是这样[‘a.xlsx’,‘b....
    import os
    import pandas as pd
    
    # 遍历某目录下的Excel文件名字,加入列表
    list1 = []
    for file in os.listdir(document_path):
            if file.endswith("xlsx") or file.endswith("xls"):
                list1.append(file)
    

    list1 列表大概是这样[‘a.xlsx’,‘b.xlsx’,‘c.xls’…],接下来可以用相对路径或绝对路径读取

    # 相对路径读取,即代码与文件同目录才可以
    for i in list1:
    	pd.read_excel(i)
    # 绝对路径读取
    for i in list1:
    	excel_path = os.path.join(document_path,i)
    	pd.read_excel(excel_path)
    

    pandas读取Excel文件下的sheet

    writer = pd.ExcelFile('./a.xlsx')
    sheet_len = len(writer.sheet_names)
    # 指定下标读取
    for i in range(0,sheet_len):
        df = pd.read_excel(writer,sheetname=i)
    
    展开全文
  • 目录目标问题原始数据最终输出代码内容知识点储备遍历文件概述参数实例注意:excel操作excel读操作注意:代码示例excel 操作数据处理处理末尾的换行符文件名去重 目标问题 本文中主要是将相同后缀的多个文件合并到...

    目标问题

    本文中主要是将相同后缀的多个文件合并到excel中,通过此思路可以解决:

    • 完成不同类型的文件向excel的操作。
    • 完成不同sheet的excel操作。

    原始数据

    1. 文件夹内容
    文件内容
    2. 单个文件内容,以14.G1125为例
    数据结构

    最终输出

    1 最终效果
    以站点命名的数据集合
    2 单个文件内容
    说明:相同站点放到同一个excel中,不同日期放到不同的sheet中。
    相同站点放到同一个excel中,不同日期放到不同的sheet中。

    代码内容

    import os
    import xlwt
    '''
    Author:zflyee
    思路:
    1. 先对所有文件名进行收集并切分后去重
    2. 再找到所有后缀文件名的路径
    3. 做循环读入数据,同一个excel的不同sheet里面
    '''
    # 获取所有的文件后缀名
    def file_name(file_dir):
        name_suffix=[] # 创建文件后缀列表
        file_path=[]   # 创建文件路径空列表
        for root, dirs, files in os.walk(file_dir): # 遍历文件,返回一个三元组
            # 获取文件所有路径
            for file in files:
                file_path.append(os.path.join(root,file)) # 拼接文件路径
                L=file.split('.')[1]                      # 得到文件的后缀
                if L not in name_suffix:                  # 去重
                    name_suffix.append(L)
        return file_path,name_suffix                      # 返回文件名路径与后缀路径
    
    def main():
        ## 汇总同后缀名文件
        dir_path='W:\Solar Radiation\Data\Data_original\Temp_data\秒级数据' # 设置文件路径
        File_Path,Name_Suffix=file_name(dir_path) #得到所有文件名的路径 和 后缀名的列表
        # print(Name_Suffix)
        ## 进行数据处理
        for upfile in Name_Suffix: # 遍历所有后缀
            res_path=r'W:\Solar Radiation\Data\Data_original\Temp_data\res/'+upfile+'.xls' #以后缀为文件名,然后设置文件输出路径
            DataWriter=xlwt.Workbook(style_compression=0) # 创建一个excel
            for file in File_Path: # 遍历所有文件路径
                data_name = os.path.basename(file).split(sep='.')[0]  # 得到每个数据文件的名称
                data_suffix = os.path.basename(file).split(sep='.')[1] # 得到每个数据文件的后缀
                # 核心部分
                if data_suffix==upfile: # 对比数据文件后缀与列标中的后缀
                    sheet = DataWriter.add_sheet(data_name, cell_overwrite_ok=True) # 在打开的excel中增加数据文件的sheet
                    f=open(file, encoding='utf-8') # 读取单个文件,注意转码
                    lines=f.readlines()            # 读取内容,常规操作
                    i=0                            # 这里设置单元格的“行”
                    for line in lines:             # 读取每一行数据
                        line=line.strip('\n')      # 去掉每行末尾的转行符
                        # print(line)              # 为了有安全感,可以选择打印
                        # 下面偷了个懒,读者可以根据实际需要写入不同的列!
                        sheet.write(i,0,line)      # 将每一行数据写入到excel的第i行,第1列中(python中,是从0开始计数的),可以
                        i+=1                       # 设置下一行
                    f.close()                      # 关闭文件
            DataWriter.save(res_path)              # 保存写完的excel
    if __name__ == '__main__':
        main()  
    

    知识点储备

    下面是我在处理过程中用到的主要知识点,仅供参考~

    遍历文件

    概述

    os.walk() 方法用于通过在目录树中游走输出在目录中的文件名,向上或者向下。
    os.walk() 方法是一个简单易用的文件、目录遍历器,可以帮助我们高效的处理文件、目录方面的事情。
    在Unix,Windows中有效。
    语法
    walk()方法语法格式如下:

    os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])
    

    参数

    • top – 是你所要遍历的目录的地址, 返回的是一个三元组(root,dirs,files)
      – root 所指的是当前正在遍历的这个文件夹的本身的地址
      – dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)
      – files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)
    • topdown --可选,为 True,则优先遍历 top 目录,否则优先遍历 top 的子目录(默认为开启)。如果 topdown 参数为 True,walk 会遍历top文件夹,与top 文件夹中每一个子目录。
    • onerror – 可选,需要一个 callable 对象,当 walk 需要异常时,会调用。
    • followlinks – 可选,如果为 True,则会遍历目录下的快捷方式(linux 下是软连接 symbolic link )实际所指的目录(默认关闭),如果为 False,则优先遍历 top 的子目录。

    实例

    #!/usr/bin/python# -*- coding: UTF-8 -*-import osfor root, dirs, files in os.walk(".", topdown=False):for name in files:print(os.path.join(root, name))for name in dirs:print(os.path.join(root, name))
    

    注意:

    在一个目录下面只有文件,没有文件夹,这个时候可以使用os.listdir

    在我们的桌面上有一个file目录(文件夹),里面有三个文件
    file(dir)|
    –|test1.txt
    –|test2.txt
    –|test3.txt
    用下面的程序获得文件的绝对路径:

    import os
    path = r'C:\Users\Administrator\Desktop\file'
    for filename in os.listdir(path):
        print(os.path.join(path,filename))
    

    使用os.listdir读取到一个目录下面所有的文件名,然后使用os.path.join把目录的路径和文件名结合起来,就得到了文件的绝路路径,结果如下:

    C:\Users\Administrator\Desktop\file\test1.txt
    C:\Users\Administrator\Desktop\file\test2.txt
    C:\Users\Administrator\Desktop\file\test3.txt
    

    excel操作

    excel读操作

    功能:读取一个excel里的第2个sheet,将该sheet的内容全部输出。

    #coding=utf8
    import xlrd
    
    def read_excel():
        workbook = xlrd.open_workbook('demo.xlsx')
        sheet2 = workbook.sheet_by_index(1) # sheet索引从0开始
        rowNum = sheet2.nrows
        colNum = sheet2.ncols
        
        llst = []
        for i in range(rowNum):
            lst = []
            for j in range(colNum):
                lst.append(sheet2.cell_value(i, j))
            llst.append(lst)
    
        for i in range(rowNum):
            for j in range(colNum):
                print(llst[i][j],'\t\t',)# 这里的逗号是为了不让换行
            print
    
    if __name__ == '__main__':
        read_excel()
    

    注意:

    1. python对于缩进非常严苛。如果最后两句话不小心向后缩进了一下,与17行的for对齐了,那说明这两句话是read_excel函数体内部的。那就乱套了。
    2. 指定一个excel里的具体哪一个sheet,即可以按序号顺序来定位(比如第一个sheet,第2个sheet),也可以按名字来找(比如第2个sheet如果名字叫‘Sheet2’的话,就用workbook.sheet_by_name('Sheet2')来定位sheet。
    3. 获取一个cell里面的内容,可以有多种方式,比如:
      sheet2.cell_value(1,0)
      sheet2.row(1)[0].value
      sheet2.cell(1,0).value
    4. 读取到的excel的表格里的值都是unicode模式的。这种情况下如果想正确输出的话,直接print就可以。比如放在list里面,依次对list的每个元素进行print。但是不能直接print lst。这样的话打出来还是unicode的形式。正常情况下对于unicode的对象,用encode可以将一个unicode对象转换为参数中编码格式的普通字符。这一部分可参考 了解Unicode

    代码示例

    情景:读取原始excel内容并打印出来
    在这里插入图片描述

    #coding=utf8
    import xlrd
    
    def read_excel():
        # 打开文件
        workbook = xlrd.open_workbook('demo.xlsx')
        # 获取所有sheet
        #print workbook.sheet_names() # [u'Sheet1', u'Sheet2']
        sheet2_name = workbook.sheet_names()[1]
    
        # 根据sheet索引或者名称获取sheet内容
        sheet2 = workbook.sheet_by_index(1) # sheet索引从0开始
        sheet2 = workbook.sheet_by_name('Sheet2')
    
        # sheet的名称,行数,列数
        print 'sheet的名称,行数,列数'
        print sheet2.name,sheet2.nrows,sheet2.ncols
        
        rowNum = sheet2.nrows
        colNum = sheet2.ncols
        # 获取整行和整列的值(数组)
        rows = sheet2.row_values(3) # 获取第四行内容
        cols = sheet2.col_values(2) # 获取第三列内容
        print '第四行:'
        print rows
    
        llst = []
        for i in range(rowNum):
            lst = []
            for j in range(colNum):
                lst.append(sheet2.cell_value(i, j))
            llst.append(lst)
    
        for i in range(rowNum):
            for j in range(colNum):
                print llst[i][j],'\t\t',
            print
    
    if __name__ == '__main__':
        read_excel()
    

    输出
    在这里插入图片描述

    excel 写操作

    #coding=utf8
    '''
    设置单元格样式
    '''
    import xlwt, xlrd
    
    def set_style(name,height,bold=False):
        style = xlwt.XFStyle()  # 初始化样式
    
        font = xlwt.Font()  # 为样式创建字体
        font.name = name # 'Times New Roman'
        font.bold = bold
        font.color_index = 4
        font.height = height
    
        # borders= xlwt.Borders()
        # borders.left= 6
        # borders.right= 6
        # borders.top= 6
        # borders.bottom= 6
    
        style.font = font
        # style.borders = borders
    
        return style
    
    
    #写excel
    def write_excel():
        f = xlwt.Workbook() #创建工作簿
    
        '''
        创建第一个sheet:
            sheet1
        '''
        sheet1 = f.add_sheet(u'sheet1',cell_overwrite_ok=True) #创建sheet
        row0 = [u'业务',u'状态',u'北京',u'上海',u'广州',u'深圳',u'状态小计',u'合计']
        column0 = [u'机票',u'船票',u'火车票',u'汽车票',u'其它']
        status = [u'预订',u'出票',u'退票',u'业务小计']
    
        #生成第一行
        for i in range(0,len(row0)):
            sheet1.write(0,i,row0[i],set_style('Times New Roman',220,True))
    
        #生成第一列和最后一列(合并4行)
        i, j = 1, 0
        while i < 4*len(column0) and j < len(column0):
            sheet1.write_merge(i,i+3,0,0,column0[j],set_style('Arial',220,True)) #第一列
            sheet1.write_merge(i,i+3,7,7) #最后一列"合计"
            i += 4
            j += 1
    
        sheet1.write_merge(21,21,0,1,u'合计',set_style('Times New Roman',220,True))
    
        #生成第二列
        i = 0
        while i < 4*len(column0):
            for j in range(0,len(status)):
                sheet1.write(j+i+1,1,status[j])
            i += 4
    
        f.save('demo1.xls') #保存文件.这里如果是.xlsx的话会打不开。
    
    if __name__ == '__main__':
        #generate_workbook()
        #read_excel()
        write_excel()
    

    注意:最终生成的文件如果是demo1.xlsx的话打不开,.xls就没问题。
    如果对一个单元格重复操作,会引发error。所以在打开时加cell_overwrite_ok=True解决
    table = file.add_sheet('sheet name',cell_overwrite_ok=True)

    生成的demo1.xls效果如下。
    ​​在这里插入图片描述

    数据处理

    处理末尾的换行符

    程序如下:

    for line in file.readlines():
        line=line.strip('\n')
    

    使用strip()函数去掉每行结束的\n

    strip()函数原型

    声明:s为字符串,rm为要删除的字符序列

    s.strip(rm) 删除s字符串中开头、结尾处,位于 rm删除序列的字符

    s.lstrip(rm) 删除s字符串中开头处,位于 rm删除序列的字符

    s.rstrip(rm) 删除s字符串中结尾处,位于 rm删除序列的字符

    注意:

    当rm为空时,默认删除空白符(包括’\n’, ‘\r’, ‘\t’, ’ ')

    文件名去重

    方案一:通过列表去重
    情况:读取同一个文件夹下所有相同的后缀名,原始文件如下
    文件是以不同站点名做后缀,目的是为了得到所有后缀的集合。

    def file_name(file_dir):
        name_suffix=[]
        file_path=[]
        for root, dirs, files in os.walk(file_dir): # 改
            # 获取文件所有路径
            for file in files:
                file_path.append(os.path.join(root,file))
                L=file.split('.')[1]
                if L not in name_suffix:
                    name_suffix.append(L)
        return file_path,name_suffix
    

    这是最后数据的后缀名集合

    ['G1125', 'G1132', 'G1143', 'G1145', 'G1179', 'G1189', 'G3526', 'G3536', 'G3544', 'G3555', 'G3561', 'G3567', 'G3636', 'G3726', 'G3779']
    

    方案二:通过集合去重
    思路是通过将其他类型的数据变成集合,利用集合的元素唯一性来去重

    展开全文
  • <p>In my code below I'm using the <a href="https://github.com/360EntSecGroup-Skylar/excelize" rel="nofollow noreferrer"><strong>exclize</strong></a> library to read data from an excel sheet. ...
  • public class poiDemo { public static void main(String[] args) throws FileNotFoundException, IOException { HSSFWorkbook workbook=new HSSFWorkbook(new FileInputStream(new File("c:/新建 Microsoft Excel ...

    import java.io.File;

    import java.io.FileInputStream;

    import java.io.FileNotFoundException;

    import java.io.IOException;

    import org.apache.poi.hssf.usermodel.HSSFRow;

    import org.apache.poi.hssf.usermodel.HSSFSheet;

    import org.apache.poi.hssf.usermodel.HSSFWorkbook;

    public class poiDemo {

    public static void main(String[] args) throws FileNotFoundException, IOException {

    HSSFWorkbook workbook=new HSSFWorkbook(new FileInputStream(new File("c:/新建 Microsoft Excel 工作表.xls")));

    HSSFSheet sheet=null;

    for (int i = 0; i < workbook.getNumberOfSheets(); i++) {

    sheet=workbook.getSheetAt(i);

    for (int j = 0; j < sheet.getPhysicalNumberOfRows(); j++) {

    HSSFRow row=sheet.getRow(j);

    for (int k = 0; k < row.getLastCellNum(); k++) {

    System.out.print(row.getCell(k)+"\t");

    }

    System.out.println();

    }

    }

    }

    }

    展开全文
  • # -*- coding: utf-8 -*-import globimport xlwings as xwx=glob.glob(r'D:\Python实践\测试报告\*.xls*')if len(x) : print(x) for y in x: wb=xw.Book(y) sht=wb.sheets[0] print(sht.range(...
  • 输出格式 分 n 行,每行输出一个整数 关于range函数的详细说明 range函数可以很方便的遍历,目前常用于循环 def loop(n): for i in range(n): print(i*i) if __name__ == '__main__': n = int(input()) # 输入一个...
  • 主要介绍了python遍历文件夹下所有excel文件的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • /usr/bin/env python# -*- coding: utf-8 -*-import csvimport xlrdimport xlwtdef handler_excel(filename=r'/Users/zongyang.yu/horizon/ops_platform/assets/upload/1.xlsl'):# 打开文件workbo...
  • I want to use foreach to iterate through all the cells in my excel file in order to set a single foreground color. This is what I have so far.HSSFWorkbook wb = new HSSFWorkbook();HSSFSheet sheet = wb....
  • import xlsxwriter import os class FilePath ... excel_path ...excel_path ...# 判断Agilent中的内容是否为文件夹,不是则进入下一循环 ...#遍历一个文件夹---->二级文件夹下的使用文件--->添加到列表
  • * //读取excel中的全部内容写入到新的excel中 //读取第一张工作表 * * jxl.write.WritableSheet ws = wwb.getSheet(0); * * //获得第一个单元格对象 * * jxl.write.WritableCell wc ...
  • POI遍历excel

    2018-08-26 22:56:36
    使用POI,通过多个循环读取EXCEL中的所有Sheet表内容。 package poitest; import java.io.File; import java.io.FileInputStream; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf....
  • python遍历excel

    千次阅读 2019-11-18 14:57:30
    from openpyxl import load_workbook def printXLSXInfo(self, xlsxFile): wb = load_workbook(filename=xlsxFile) errCounter = 0 for x in wb: sheet_ranges = wb[x.title] for val in ...
  • JAVA遍历EXCEL表格

    2011-07-08 17:37:43
    如何使用JavaExcel(jxl)读取一个文件并写入一个新文件
  • I have a excel table with a autofilter.In the filtered table i only have few rows filtered.My objective is icterate all visible rows to colect data to copy to anothe sheet.I want a way to collect a va...
  • python遍历excel文件并保存为excel文件

    千次阅读 2019-09-12 19:52:33
    这些天在做深度学习的时候,需要对原始数据进行预处理,所以下了一些脚本用于对数据处理。源代码如下: #!/usr/bin/python # -*-coding: utf-8 -*- import xlrd import xlwt import os import numpy as np ...
  • NPOI遍历excel表格

    2020-03-06 19:41:00
    遍历指定文件夹内所有的xls,首先获取所有文件夹内的xls文件路径,使用VBA脚本生成到一个xls文件中,VBA脚本如下: Sub filelist() Dim MyName, Dic, Did, i, t, F, TT, MyFileName 'On Error Resume Next Set ...
  • import osimport pandas as pdfrom sklearn import linear_modelpath = r'D:\新数据\每日收益率'filenames = os.listdir(path)for filename in filenames:print(filename)for i in filenames:excel_path = 'D:\新...
  • java读取遍历excel

    千次阅读 2016-07-28 16:27:32
    java通过poi方式读取excel文件适用于.xlsx格式,如果是xls可以先将xls转换成xlsximport org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.xssf.usermodel....
  • python中groupby遍历,并写入excel中不同sheet页 -- coding: utf-8 -- 导入模块 import numpy as np import pandas as pd import xlrd import xlwt path1= ‘结果.xlsx’ work_book=pd.read_excel(path1,dtype={4:...
  • 经常用到excel,以下是遍历当前文件夹下的excel表。 Sub bl() Dim myPath As String, myFile As String Dim i As Integer Dim Arr() As String i = 0 myPath = ThisWorkbook.Path & "\*.xls*" myFile = Dir(myP...
  • 遍历指定目录下所有路径,并把所有路径一一写入指定的excel文件,本源代码两个技术学习:遍历路径、生成并写入excel文件。文件完整,可用可学
  • SQL 循环遍历

    千次阅读 2015-12-19 09:08:09
    一:遍历 数据表 select HID into #temp from MD_SheetTemplate where SheetStateID=1 declare @HID varchar(50) WHILE EXISTS( select HID from #temp ) ---遍历临时表 begin   select top 1 @HID=HID fro
  • vb编程遍历Excel中所有单元格,读取出所有单元格内容
  • 遍历Excel获取每个单元格数据

    千次阅读 2019-03-29 15:31:50
    //遍历行的集合,取得每一个行的datarow对象 foreach (DataRow row in dataTableRow) { foreach (var item in row.ItemArray) { if (item.ToString().Trim() != "" && reg.IsMatch(item.ToString().Trim())) ...
  • Java后台遍历Excel文件的数据

    千次阅读 2019-03-28 16:44:33
    //每一列数据长度应该死,否则后面遍历取最后列的值会报数组越界异常 Row row1=sheet.getRow(0); int maxRow1 =row1.getLastCellNum(); // 如果总共有3条记录,那获取到的最后记录号就为2,因为是从0开始的 ...
  • 以下是代码,两个函数意思是分别读取excel表格的第一行和第二行,发起request请求,i代表行数,请教一下,可以怎样把以下代码合并?两个函数差别只在i不同而已。想要做到每读取一行excel表格的内容,就发一次request...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,574
精华内容 5,429
关键字:

列表遍历循环写excel