2017-02-07 4 views
2

Мы находимся в переходном процессе от python 2.7 до python 3.5. Это изменение компании, и большинство наших текущих скриптов были написаны в 2.7 и никаких дополнительных библиотек. Я воспользовался дистрибутивом Anaconda, который мы используем, и уже изменил большинство наших скриптов с использованием модуля 2to3 или полностью переписал их. Я застрял на одном фрагменте кода, хотя и не писал, а оригинального автора здесь нет. Он также не предоставил комментарии, поэтому я могу только догадываться о целом сценарии. 95% скрипта работает правильно до конца, где после создания 7 файлов csv с разной анализируемой информацией у него есть настраиваемая функция для объединения файлов csv в рабочую книгу xls и каждой csv в качестве новой вкладки.Объединение нескольких файлов csv в одну книгу xls Python 3

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") 

Это было написано на всех языках python 2.7 и работает корректно, если я запустил его в python 2.7. Проблема заключается в том, что он выдает ошибку при запуске в python 3.5.

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.

ответ

5

Не знаете, почему это заблуждается. Это стоит усилий, чтобы переписать код и использовать панды вместо этого. Pandas может читать каждый файл csv в отдельный фрейм данных и сохранять все файлы данных в виде отдельного листа в файле xls (x). Это можно сделать, используя ExcelWriter pandas. Например.

import pandas as pd 
writer = pd.ExcelWriter('yourfile.xlsx', engine=xlsxwriter) 
df = pd.read_csv('originalfile.csv') 
df.to_excel(writer, sheet_name='sheetname') 
writer.save() 

Поскольку у вас есть несколько файлов CSV, вы, вероятно, хотите, чтобы прочитать все файлы в формате CSV и сохранять их в качестве ФР в Словаре. Затем напишите каждый df в Excel с новым именем листа.

+0

Спасибо за ответ. Решена проблема, заключающаяся в исправлении некоторых кодировок файлов csv. Кроме того, некоторые файлы должны были иметь определенную кодировку, отличную от рабочей книги, чтобы заставить скрипт функционировать. Совершенно странно, но он работает, и теперь у меня есть четыре функционирующих скрипта под графическим интерфейсом PyQt. Я, вероятно, добавлю панд, чтобы убедиться, что он будет работать в будущем. –

+0

Эй @TobiasWright Есть ли способ опубликовать код здесь. Я пытаюсь следовать. Спасибо. – JPC

+0

'NameError: name 'xlsxwriter' не определен'. Кроме того, кажется, что 'pandas' предполагает, что' openpyxl' доступен. Можете ли вы сделать этот ответ более полным? (Я начинаю с miniconda, если это отвечает, почему у меня нет всего установленного.) – r2evans

Смежные вопросы