如何将多个excel工作表转换为csv python

如何将多个excel工作表转换为csv python,python,excel,csv,Python,Excel,Csv,我想将所有excel document.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):

我想将所有excel document.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


任何帮助都将不胜感激。

wb.sheet\u name以获取所有工作表名称,然后循环并动态将名称放入工作表名称中

wb.sheet\u name以获取所有工作表名称,然后循环并动态地将名称放入工作表\u name

我遇到了一个类似的问题,即在转换为.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)   

我是编程新手,所以可能有更好的方法。希望这能有所帮助。

我遇到了一个类似的问题,即在转换为.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)   

我是编程新手,所以可能有更好的方法。希望这能有所帮助。

我正在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循环用作
对于键,df.items中的值:

我在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循环用作
对于键,df.items中的值:

我的理解是,您试图为每张工作表获取一个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)
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")
如果确实要将所有图纸连接到一个CSV,则它们都需要具有相同的列名。您可以通过执行以下操作将所有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)
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")

我的理解是,您试图为每张工作表获取一个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)
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")
如果确实要将所有图纸连接到一个CSV,则它们都需要具有相同的列名。您可以通过执行以下操作将所有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)
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")

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


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


谢谢@Ashu007,但我得到了TypeError:“DataFrame”对象是可变的,因此在尝试循环时它们不能散列。你能显示你的代码和错误吗?我必须按照@SClarkThreak@Ashu007下面的回答将df.items更改为df.keys,但我得到了TypeError:“DataFrame”对象是可变的,因此,在尝试循环时无法对它们进行散列。您能显示您的代码和错误吗?我必须按照@SClarkThank下面的回答将df.items更改为df.keys,我想知道为什么Ashu007的代码不起作用。谢谢你的更新。谢谢,我想知道为什么Ashu007的代码不起作用。感谢您的更新。您正在循环中多次读取excel文件,这会带来严重的开销。您正在循环中多次读取excel文件,这会带来严重的开销。