Python Ошибка генерации Excel в windows - PullRequest
0 голосов
/ 16 июня 2020

Код ниже работает нормально в Unix, и при попытке заставить его работать в windows он терпит неудачу - я пытаюсь создать excel после объединения нескольких файлов csv в каталоге. Имена вкладок в excel должны соответствовать имени файла csv -

Ниже приведен код

def create_Excel(path,output_file):
 print("Input path is " + path)
 print("Output File name " + output_file )
 wb = xlwt.Workbook()
 for csvfile in glob(os.path.join(path, '*.csv')):
   fpath = csvfile.split("/", 1)
   print ("Current Path " + csvfile )
   fname = fpath[1].split("\\", 2)
   print(str(fname)[1:-1] )
   print ("Current Filename... " + fname[1].split(".",1)[0] )
   ws = wb.add_sheet( fname[1].split(".",1)[0] )
   with open(csvfile, 'rb') as f:
     reader = csv.reader(f)
     for r, row in enumerate(reader):
       for c, col in enumerate(row):
         ws.write(r, c, col)
   wb.save(output_file)

Ошибка -

_csv.Error: iterator should return strings, not bytes (did you open the file in text mode?)

Любое предложение, пожалуйста? Полный вывод -

Output File name INFA_XML.xls
Current Path C:/TEMP/Output\aggregator.csv
'TEMP/Output', 'aggregator.csv'
Current Filename... aggregator
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 14, in create_Excel
_csv.Error: iterator should return strings, not bytes (did you open the file in text mode?)

1 Ответ

0 голосов
/ 16 июня 2020

Правильный код -

def create_Excel(path,output_file):
 print("Input path is " + path)
 print("Output File name " + output_file )
 wb = xlwt.Workbook()
 for csvfile in glob(os.path.join(path, '*.csv')):
  fpath = csvfile.split("/", 1)
  print ("Current Path " + csvfile )
  fname = fpath[1].split("\\", 2)
  print(str(fname)[1:-1] )
  print ("Current Filename... " + fname[1].split(".",1)[0] )
  ws = wb.add_sheet( fname[1].split(".",1)[0] )
  with open(csvfile, 'rt') as f:
    reader = csv.reader(f)
    for r, row in enumerate(reader):
      for c, col in enumerate(row):
        print("Writing to excel .....")
        ws.write(r, c, col)
  wb.save(output_file)

Не уверен, почему 'rb' работает в Unix, но не в Windows

...