반응형
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
반응형
'codememo' 카테고리의 다른 글
| Oracle에서 쉼표로 구분된 값을 열로 분할 (0) | 2023.06.12 |
|---|---|
| 예외 블록을 테스트하기 위해 예외를 발생시키는 함수 조롱 (0) | 2023.06.12 |
| Java와 Oracle XE 간의 데이터 소스 연결을 사용하는 OCI와 SIN 드라이버 연결의 차이점은 무엇입니까? (0) | 2023.06.07 |
| 추상 클래스 유형 스크립트에 종속성 주입(Angular2) (0) | 2023.06.07 |
| current_timestamp SQL에서 10초를 추가하는 방법 (Oracle ) (0) | 2023.06.07 |