codememo

Python에서 xlrd를 사용하여 숫자 Excel 데이터를 텍스트로 읽기

tipmemo 2023. 6. 7. 22:57
반응형

Python에서 xlrd를 사용하여 숫자 Excel 데이터를 텍스트로 읽기

xlrd를 사용하여 엑셀 파일을 읽으려고 하는데 엑셀 파일에서 사용하는 셀 포맷을 무시하고 모든 데이터를 텍스트로 가져오는 방법이 있는지 궁금합니다.

지금까지 사용하고 있는 코드는 다음과 같습니다.

import xlrd

xls_file = 'xltest.xls'
xls_workbook = xlrd.open_workbook(xls_file)
xls_sheet = xls_workbook.sheet_by_index(0)

raw_data = [['']*xls_sheet.ncols for _ in range(xls_sheet.nrows)]
raw_str = ''
feild_delim = ','
text_delim = '"'

for rnum in range(xls_sheet.nrows):
    for cnum in range(xls_sheet.ncols):
        raw_data[rnum][cnum] = str(xls_sheet.cell(rnum,cnum).value)

for rnum in range(len(raw_data)):
    for cnum in range(len(raw_data[rnum])):
        if (cnum == len(raw_data[rnum]) - 1):
            feild_delim = '\n'
        else:
            feild_delim = ','
        raw_str += text_delim + raw_data[rnum][cnum] + text_delim + feild_delim

final_csv = open('FINAL.csv', 'w')
final_csv.write(raw_str)
final_csv.close()

이 코드는 작동하지만 우편 번호와 같이 숫자로 가져온 특정 필드가 있으므로 소수점 0 접미사를 사용합니다.예를 들어 엑셀 파일에 '79854'의 우편번호가 있으면 '79854.0'으로 가져옵니다.

xlrd 사양에서 해결책을 찾으려고 했지만 실패했습니다.

그것은 Excel의 정수 값이 Python에서 float로 가져오기 때문입니다.따라서,sheet.cell(r,c).value플로트를 반환합니다.값을 정수로 변환해 보십시오. 먼저 Excel에서 값이 정수인지 확인하십시오.

cell = sheet.cell(r,c)
cell_value = cell.value
if cell.ctype in (2,3) and int(cell_value) == cell_value:
    cell_value = int(cell_value)

그것은 모두 xlrd 사양에 있습니다.

질문에 포함되지 않은 것은 알지만, 저는 이 문제를 제거할 것입니다.raw_strCSV에 직접 기록합니다.대용량 파일(10,000줄)의 경우 많은 시간을 절약할 수 있습니다.

당신은 또한 제거할 수 있습니다.raw_data루프에 하나만 사용하면 됩니다.

언급URL : https://stackoverflow.com/questions/2739989/reading-numeric-excel-data-as-text-using-xlrd-in-python

반응형