【问题标题】:How to convert multiple excel sheets to csv python如何将多个excel表转换为csv python
【发布时间】:2018-07-11 13:52:03
【问题描述】:

我想将所有 excel 文档(.xls) 表转换为 csv,如果 excel 文档只有一张表,那么我将转换如下-

   wb = open_workbook(path1)
    sh = wb.sheet_by_name('Sheet1')
    csv_file = open(path2, 'w')
    wr = csv.writer(csv_file, quoting=csv.QUOTE_ALL)
    for rownum in range(sh.nrows):
        wr.writerow(sh.row_values(rownum))
    csv_file.close()

如果我的 excel(.xls) 文档有多个工作表,即('Sheet1', 'Sheet2', 'Sheet3', 'Sheet4'),而不是如何将所有工作表转换为 csv。

任何帮助将不胜感激。

【问题讨论】:

    标签: python excel csv


    【解决方案1】:

    我在 Anaconda 环境中使用 python3.x,在我的情况下,文件名为“INDIA-WMS.xlsx”,下面有 40 个不同的工作表,代码将创建 40 个不同的 csv 文件,命名为 excel 文件的工作表名称,作为 'key. .csv'。希望这对您的问题有所帮助。

        import pandas as pd
        df = pd.read_excel('INDIA-WMS.xlsx', sheet_name=None)  
        for key in df.items(): 
            df[key].to_csv('%s.csv' %key)
    

    例如,如果您有不同的工作表,如“Sheet1”、“Sheet2”、“Sheet3”等,那么上面的代码将创建不同的 csv 文件,如“Sheet1.csv”、“Sheet2.csv”、“Sheet3.csv” .这里的“键”是您的 Excel 工作簿的工作表名称。如果要在工作表中使用数据内容,可以使用 for 循环作为 for key, value in df.items():

    【讨论】:

    • 感谢@Ashu007,但在尝试循环时我得到“TypeError:'DataFrame' 对象是可变的,因此它们不能被散列”。
    • 我必须根据@sclark 的回答将 df.items() 更改为 df.keys()
    【解决方案2】:

    wb.sheet_names()获取所有的sheet名,然后循环,动态的把名字放到sheet_name中

    【讨论】:

      【解决方案3】:

      我的理解是您正在尝试为每张工作表获取一个 CSV 文件。

      您可以通过执行以下操作获得:

      excel_file = 'data/excel_file.xlsx'
      all_sheets = pd.read_excel(excel_file, sheet_name=None)
      sheets = all_sheets.keys()
      
      for sheet_name in sheets:
          sheet = pd.read_excel(excel_file, sheet_name=sheet_name)
          sheet.to_csv("data/%s.csv" % sheet_name, index=False)
      

      如果您确实想将所有工作表连接到一个 CSV,它们都需要具有相同的列名。您可以通过执行以下操作将所有 CSV 文件合并为一个:

      import glob
      import os
      all_files = glob.glob(os.path.join("data", "*.csv"))
      df_from_each_file = (pd.read_csv(f, sep=',') for f in all_files)
      df_merged = pd.concat(df_from_each_file, ignore_index=True)
      df_merged.to_csv( "data/merged.csv")
      

      Source for the second snippet

      【讨论】:

      • 循环读取excel文件多次,开销很大。
      【解决方案4】:

      我遵循Ashu007 的解决方案,但在Python3.9 和Pandas 1.2.0 上,我需要将df.items() 更改为df.keys(),如下所示:

      import pandas as pd
      df = pd.read_excel('file_name.xlsx', sheet_name=None)  
      for key in df.keys(): 
          df[key].to_csv('{}.csv'.format(key))
      

      【讨论】:

      • 谢谢,我想知道为什么 Ashu007 的代码不起作用。感谢您的更新。
      【解决方案5】:

      你可以试试下面这对我有用的代码。

      import pandas as pd
      data = pd.read_excel('sample1.xlsx', sheet_name=None)
      
      # loop through the dictionary and save csv
      for sheet_name, df in data.items():
      df.to_csv(f'{sheet_name}.csv')
      

      【讨论】:

        【解决方案6】:

        我遇到了一个类似的问题,即在转换为 .csv 之前尝试将一个 excel 文件中的多个 excel 工作表列出到一个 excel 工作表中。请注意,术语“PC”和“PC_City.xlsx”只是我正在使用的降水数据的标签。

        这对我有用:

        import pandas as pd
        
        excel_file = r'C:\Users\yourpath\PC_City.xlsx'
        df = pd.read_excel(excel_file, sheetname=None)
        xlsx = pd.ExcelFile(excel_file)
        PC_sheets = []
        for sheet in xlsx.sheet_names:
            PC_sheets.append(xlsx.parse(sheet))
            PC = pd.concat(PC_sheets)
        
        PC.to_csv('PC_City.csv', encoding='utf-8', index=False)   
        

        我是编程新手,所以可能有更好的方法来解决这个问题。希望这会有所帮助。

        【讨论】:

          【解决方案7】:
          import pandas as pd
          
          df = pd.read_excel('data.xlsx', sheet_name=None)  
          for key in df: 
             df[key].to_csv('%s.csv' %key)
          

          【讨论】:

            猜你喜欢
            • 2020-08-30
            • 2014-11-19
            • 2016-11-30
            • 1970-01-01
            • 2019-07-14
            • 2012-04-24
            • 2019-01-17
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多