2013-06-14 2 views
3

나는 파이썬의 초보자이며 아래에 표시된 코드로 위의 제목이 말하는 것을하려고합니다. 그것은 xls 출력을 저장하도록 요청하는 지점까지 실행됩니다. 어떤 도움이라도 대단히 감사 할 것입니다.탭으로 구분 된 여러 .txt 파일을 여러 .xls 파일로 변환

import glob 
import csv 
import xlwt 

for filename in glob.glob("C:\xxxx\*.txt"): 
    wb = xlwt.Workbook() 
    sheet = wb.add_sheet('sheet 1') 
    newName = filename 
    spamReader = csv.reader(open(filename, 'rb'), delimiter=';',quotechar='"') 
    for rowx, row in enumerate(spamReader): 
     for colx, value in enumerate(row): 
      sheet.write(rowx, colx, value) 

    wb.save(newName + ".xls") 

print "Done" 

Traceback (most recent call last): 
File "C:/Users/Aline/Desktop/Python_tests/1st_trial.py", line 13, in <module> 
wb.save("C:\Users\Aline\Documents\Data2013\consulta_cand_2010\newName.xls") 
File "C:\Python27\lib\site-packages\xlwt\Workbook.py", line 662, in save 
doc.save(filename, self.get_biff_data()) 
File "C:\Python27\lib\site-packages\xlwt\Workbook.py", line 637, in get_biff_data 
shared_str_table = self.__sst_rec() 
File "C:\Python27\lib\site-packages\xlwt\Workbook.py", line 599, in __sst_rec 
return self.__sst.get_biff_record() 
File "C:\Python27\lib\site-packages\xlwt\BIFFRecords.py", line 76, in get_biff_record 
self._add_to_sst(s) 
File "C:\Python27\lib\site-packages\xlwt\BIFFRecords.py", line 91, in _add_to_sst 
u_str = upack2(s, self.encoding) 
File "C:\Python27\lib\site-packages\xlwt\UnicodeUtils.py", line 50, in upack2 
us = unicode(s, encoding) 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc7 in position 4: ordinal not in range(128) 

[편집] 이 코드는 작동합니다.

import glob 
import csv 
import xlwt 

for filename in glob.glob("C:\\Users\\Aline\\Documents\\Data2013\\consulta_cand_2010\\*.txt"): 
    spamReader = csv.reader((open(filename, 'rb')), delimiter=';',quotechar='"') 
    encoding = 'latin1' 
    wb = xlwt.Workbook(encoding=encoding) 
    sheet=xlwt.Workbook() 
    sheet = wb.add_sheet('sheet 1') 
    newName = filename 
    for rowx, row in enumerate(spamReader): 
     for colx, value in enumerate(row): 
      sheet.write(rowx, colx, value) 
    wb.save(newName + ".xls") 

print "Done" 
+0

출력이 예상과 어떻게 다른가요? – Lazarus

+0

@Lazarus, 답장을 보내 주셔서 감사합니다. 위의 추적을 얻었고 Python 2.7을 사용하고 있습니다. – Aline

+0

오류에서 파일에 오류를 일으키는 특정 문자 (0xc7)가있는 것처럼 보입니다. 그래서 당신은 먼저 그 문자들을 공백이나 아스키 값이 128보다 작은 것들로 대체 할 수 있습니다. –

답변

0

출력 스프레드 시트에 인코딩을 설정해야한다고 생각합니다. 파일에서 사용중인 인코딩을 알아야합니다. csv 모듈은 유니 코드를 직접 지원하지 않지만 [8-bit-clean][1]이므로 대부분의 서양 언어에서만 작동합니다.

텍스트 파일의 인코딩이 무엇인지 모르는 경우 두 가지 옵션이 있습니다. 옵션 1은 파이썬에 따라 로컬 인코딩을 사용합니다 :

>>> import locale 
    >>> lang_code, encoding = locale.getdefaultlocale() 

^^ getdefaultlocale()을 사용할 때는주의하십시오. 문서에 인코딩이 일 수 있습니다. 없음.

또는 UTF8로 대체하여 손가락을 교차하십시오. D.

>>> encoding = 'UTF8' 
    >>> workbook = xlwt.Workbook(encoding=encoding) 
+0

Jaime, 답변 해 주셔서 대단히 감사합니다. 두 번째 옵션은 내 문제를 해결했지만 UTF8을 latin1로 대체했습니다. – Aline

0

파일 이름을 이스케이프하고 있지 않습니다. 예를 들어, 파이썬에서 문자열 "consulta_cand_2010\newName.xls"의 중간에 "\n"이 있는데, 이는 줄 끝 문자입니다. 파일 이름에 유효하지 않습니다!

Windows에서 파일 이름이 "C:\\Like\\This" 또는 "C:/Like/This" 또는 r"C:\Like\This" 인 리터럴 문자열을 작성해야합니다.

+0

답장을 보내 주셔서 감사합니다. 나는 그 길을 바로 잡았지만, 나는 여전히 같은 문제를 겪고있다. @himanshushekhar가 위에서 제시 한 것처럼, 입력 파일에서 파이썬이 인식하지 못하는 일부 포르투갈어 문자에서 오는 오류가 있습니다. 이 문제를 해결하는 방법에 대한 아이디어는 대단히 감사하겠습니다. – Aline

관련 문제