首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将多个csv文件合并到单个xls工作簿Python 3中

将多个csv文件合并到单个xls工作簿Python 3中
EN

Stack Overflow用户
提问于 2017-02-07 22:23:29
回答 1查看 18K关注 0票数 9

我们正处于从python 2.7到python 3.5的过渡阶段。这是一个公司范围内的变化,我们目前的大多数脚本都是用2.7编写的,没有额外的库。我已经利用了我们正在使用的Anaconda发行版,并且已经通过使用2to3模块或完全重写了我们的大多数脚本。然而,我被一段代码卡住了,这段代码不是我写的,原始作者也不在这里。他也没有提供评论,所以我只能猜测整个脚本。95%的脚本工作正常,直到最后,在它创建了7个csv文件与不同的解析信息后,它有一个自定义功能,将csv文件组合到xls工作簿中,每个csv都作为新的选项卡。

代码语言:javascript
复制
import csv
import xlwt
import glob
import openpyxl
from openpyxl import Workbook

Parsefiles = glob.glob(directory + '/' + "Parsed*.csv")
def xlsmaker():
    for f in Parsefiles:
        (path, name) = os.path.split(f)
        (chort_name, extension) = os.path.splittext(name)
        ws = wb.add_sheet(short_name)
        xreader = csv.reader(open(f, 'rb'))
        newdata = [line for line in xreader]
        for rowx, row in enumerate(newdata)
            for colx, value in enumerate(row):
                if value.isdigit():
            ws.write(rowx, colx, value)

xlsmaker()

for f in Parsefiles:
    os.remove(f)

wb.save(directory + '/' + "Finished" + '' + oshort + '' + timestr + ".xls")

这都是用python2.7编写的,如果我在python2.7中运行它,它仍然可以正常工作。问题是它在python3.5中运行时会抛出错误。

代码语言:javascript
复制
File "parsetool.py", line 521, in (module)
  xlsmaker()
File "parsetool.py", line 511, in xlsmaker
  ws = wb.add_sheet(short_name)
File "c:\pythonscripts\workbook.py", line 168 in add_sheet
  raise TypeError("The paramete you have given is not of the type '%s'"% self._worksheet_class.__name__)
TypeError: The parameter you have given is not of the type "Worksheet"

对于如何修复上述错误,您有什么想法吗?Iv'e尝试了多次重写,但我得到了类似的错误或新的错误。我正在考虑用一种全新的方法来创建xls,可能是pandas。

EN

回答 1

Stack Overflow用户

发布于 2021-04-28 02:35:37

您可以使用下面的代码,将多个.csv文件读取到一个大的.xlsx Excel文件中。我还添加了将','替换为'.' (反之亦然)的代码,以提高windows环境下的兼容性,并根据您的语言环境设置。

代码语言:javascript
复制
import pandas as pd
import sys
import os
import glob
from pathlib import Path

extension = 'csv'
all_filenames = [i for i in glob.glob('*.{}'.format(extension))]

writer = pd.ExcelWriter('fc15.xlsx') # Arbitrary output name
for csvfilename in all_filenames:

    txt = Path(csvfilename).read_text()
    txt = txt.replace(',', '.')

    text_file = open(csvfilename, "w")
    text_file.write(txt)
    text_file.close()
    
    print("Loading "+ csvfilename)
    df= pd.read_csv(csvfilename,sep=';', encoding='utf-8')

    df.to_excel(writer,sheet_name=os.path.splitext(csvfilename)[0])
    print("done")
writer.save()
print("task completed")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42092263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档