Python으로 Excel(xls) 파일 읽기/파싱
CSV 파일이 아닌 Python으로 Excel(XLS) 파일을 읽는 가장 좋은 방법은 무엇입니까?
이 작업을 수행하기 위해 파이썬에서 기본적으로 지원되는 내장 패키지가 있습니까?
나는 독서를 위해 xlrd를 강력히 추천합니다..xls
파일. 그러나 몇 가지 제한 사항이 있습니다(xlrd github 페이지 참조).
경고문
이 라이브러리는 더 이상 .xls 파일 이외의 다른 파일을 읽지 않습니다.최신 파일 형식을 읽는 방법은 http://www.python-excel.org/ 을 참조하십시오.
다음 항목도 지원되지 않지만 안전하고 안정적으로 무시됩니다.
- Charts, Macros, Pictures, any other embedded object, including embedded worksheets. - VBA modules - Formulas, but results of formula calculations are extracted. - Comments - Hyperlinks - Autofilters, advanced filters, pivot tables, conditional formatting, data validation
암호로 보호된 파일은 지원되지 않으므로 이 라이브러리에서 읽을 수 없습니다.
보이저는 COM 자동화의 사용을 언급했습니다.몇 년 전에 직접 이 일을 한 적이 있습니다. 이 일을 하는 것이 진정한 피타라는 것을 경고하십시오.경고의 수는 엄청나고 문서화가 부족하고 짜증이 납니다.저는 많은 이상한 벌레들과 우연히 마주쳤고, 어떤 것들은 알아내는데 많은 시간이 걸렸습니다.
업데이트:
최신 버전의 경우.xlsx
파일, 읽기 및 쓰기를 위한 권장 라이브러리는 openpyxl로 나타납니다(감사합니다, Ikar Pohorský).
판다를 사용하여 이 작업을 수행할 수 있습니다. 먼저 필요한 라이브러리를 설치합니다.
$ pip install pandas openpyxl
아래 코드 참조:
import pandas as pd
xls = pd.ExcelFile(r"yourfilename.xls") # use r before absolute file path
sheetX = xls.parse(2) #2 is the sheet number+1 thus if the file has only 1 sheet write 0 in paranthesis
var1 = sheetX['ColumnName']
print(var1[1]) #1 is the row number...
그 중에서 아무 것이나 선택할 수 있습니다. http://www.python-excel.org/
저는 python xlrd 라이브러리를 추천합니다.
사용하여 설치
pip install xlrd
사용하여 가져오기
import xlrd
문제집을 펴다
workbook = xlrd.open_workbook('your_file_name.xlsx')
이름으로 시트를 펴기
worksheet = workbook.sheet_by_name('Name of the Sheet')
색인별로 시트 열기
worksheet = workbook.sheet_by_index(0)
셀 값 읽기
worksheet.cell(0, 0).value
저는 판다가 가장 좋은 방법이라고 생각합니다.이미 여기 판다들이 사용하는 답이 하나 있습니다.ExcelFile
기능은 있지만, 저에게는 제대로 작동하지 않았습니다.여기서 나는 그것을 발견했습니다.read_excel
제대로 작동하는 기능:
import pandas as pd
dfs = pd.read_excel("your_file_name.xlsx", sheet_name="your_sheet_name")
print(dfs.head(10))
추신. 당신은 그것을 가질 필요가 있습니다.xlrd
에설된치를 되었습니다.read_excel
to (function to work.
업데이트 21-03-2020:여기에서 볼 수 있듯이, 다음과 같은 문제가 있습니다.xlrd
더 이상 사용되지 않을 것입니다.그openpyxl
최고의 대체품입니다.따라서 여기에 설명된 바와 같이 표준 구문은 다음과 같습니다.
dfs = pd.read_excel("your_file_name.xlsx", sheet_name="your_sheet_name", engine="openpyxl")
업데이트 03-03-2023:이제 몇 가지 다른 옵션을 사용할 수 있습니다.예를 들어 Rust로 작성된 Polars 라이브러리:
import polars as pl
dfs = pl.read_excel("your_file_name.xlsx", sheet_name="your_sheet_name")
PyArrow 및 Pyodbc 라이브러리도 자유롭게 확인하십시오.
xlsx의 경우 이전에 https://web.archive.org/web/20180216070531/https ://stackoverflow.com/questions/4371163/reading-xlsx-files-using-python 로 게시된 솔루션이 좋습니다.표준 라이브러리의 모듈만 사용합니다.
def xlsx(fname):
import zipfile
from xml.etree.ElementTree import iterparse
z = zipfile.ZipFile(fname)
strings = [el.text for e, el in iterparse(z.open('xl/sharedStrings.xml')) if el.tag.endswith('}t')]
rows = []
row = {}
value = ''
for e, el in iterparse(z.open('xl/worksheets/sheet1.xml')):
if el.tag.endswith('}v'): # Example: <v>84</v>
value = el.text
if el.tag.endswith('}c'): # Example: <c r="A3" t="s"><v>84</v></c>
if el.attrib.get('t') == 's':
value = strings[int(value)]
letter = el.attrib['r'] # Example: AZ22
while letter[-1].isdigit():
letter = letter[:-1]
row[letter] = value
value = ''
if el.tag.endswith('}row'):
rows.append(row)
row = {}
return rows
시트 이름으로 콘텐츠를 가져오고, 열을 얻기 위해 re를 사용하며, 공유 문자열이 사용되는지 확인하는 기능이 추가되었습니다.
def xlsx(fname,sheet):
import zipfile
from xml.etree.ElementTree import iterparse
import re
z = zipfile.ZipFile(fname)
if 'xl/sharedStrings.xml' in z.namelist():
# Get shared strings
strings = [element.text for event, element
in iterparse(z.open('xl/sharedStrings.xml'))
if element.tag.endswith('}t')]
sheetdict = { element.attrib['name']:element.attrib['sheetId'] for event,element in iterparse(z.open('xl/workbook.xml'))
if element.tag.endswith('}sheet') }
rows = []
row = {}
value = ''
if sheet in sheets:
sheetfile = 'xl/worksheets/sheet'+sheets[sheet]+'.xml'
#print(sheet,sheetfile)
for event, element in iterparse(z.open(sheetfile)):
# get value or index to shared strings
if element.tag.endswith('}v') or element.tag.endswith('}t'):
value = element.text
# If value is a shared string, use value as an index
if element.tag.endswith('}c'):
if element.attrib.get('t') == 's':
value = strings[int(value)]
# split the row/col information so that the row leter(s) can be separate
letter = re.sub('\d','',element.attrib['r'])
row[letter] = value
value = ''
if element.tag.endswith('}row'):
rows.append(row)
row = {}
return rows
이전 XLS 형식이 필요한 경우.아래 코드는 ansii 'cp1251'입니다.
import xlrd
file=u'C:/Landau/task/6200.xlsx'
try:
book = xlrd.open_workbook(file,encoding_override="cp1251")
except:
book = xlrd.open_workbook(file)
print("The number of worksheets is {0}".format(book.nsheets))
print("Worksheet name(s): {0}".format(book.sheet_names()))
sh = book.sheet_by_index(0)
print("{0} {1} {2}".format(sh.name, sh.nrows, sh.ncols))
print("Cell D30 is {0}".format(sh.cell_value(rowx=29, colx=3)))
for rx in range(sh.nrows):
print(sh.row(rx))
노인을 위한.xls
파일, 사용할 수xlrd
둘 중 하나를 사용할 수 있습니다.xlrd
직접 수입을 통해.아래와 같이
import xlrd
wb = xlrd.open_workbook(file_name)
또는 판다를 사용할 수도 있습니다.pd.read_excel()
기본값은 다음과 같으나 엔진을 지정하는 것을 잊지 마십시오.xlrd
지정해야 합니다.
pd.read_excel(file_name, engine = xlrd)
그들 둘 다 나이든 사람들을 위해 일합니다..xls
파일 형식사실 제가 이걸 사용할 때 우연히 발견했습니다.OpenPyXL
저는 아래의 오류를 받았습니다.
InvalidFileException: openpyxl does not support the old .xls file format, please use xlrd to read this file, or convert it to the more recent .xlsx file format.
여기에 나열된 라이브러리(예: JexcelApi 또는 xlwt 기반의 Pyxlreader)와 COM 자동화를 사용하여 파일 읽기에 Excel 자체를 사용할 수 있지만, 이 경우 Office를 소프트웨어의 종속성으로 도입하는 것이 항상 옵션은 아닐 수 있습니다.
(비 파이썬) 프로그램 xls2csv를 실행하는 것도 고려할 수 있습니다.xls 파일을 입력하면 csv가 반환됩니다.
Python Excelerator도 이 작업을 처리합니다.http://ghantoos.org/2007/10/25/python-pyexcelerator-small-howto/
데비안과 우분투에서도 사용할 수 있습니다.
sudo apt-get install python-excelerator
with open(csv_filename) as file:
data = file.read()
with open(xl_file_name, 'w') as file:
file.write(data)
CSV는 내장 패키지에서 위와 같이 우수하게 변환할 수 있습니다. CSV는 python 사전 작업과 동일한 방식으로 작동하는 dictreader 및 dictwriter의 내장 패키지로 처리할 수 있습니다.그것은 매우 쉽게 해줍니다. 현재 엑셀을 위한 내장 패키지는 모르지만 openpyxl을 우연히 발견했습니다.그것은 또한 꽤 솔직하고 간단했습니다. 아래 코드 스니펫을 볼 수 있습니다. 이것이 도움이 되기를 바랍니다.
import openpyxl
book = openpyxl.load_workbook(filename)
sheet = book.active
result =sheet['AP2']
print(result.value)
이전 Excel 파일의 경우 OleFile이 있습니다.사용된 OLE 구조화 스토리지 형식을 읽을 수 있는 IO_PL 모듈입니다.
만약 파일이 정말로 오래된 .xls라면, 이것은 base open()과 panda를 사용하는 것만으로도 python3에서 작동합니다.
df = pandas.read_csv(open(f, encoding = 'UTF-8'), sep='\t')
내가 사용하는 파일은 탭으로 구분되어 있습니다.텍스트 편집기가 .xls를 읽을 수 있어야 구분 기호를 찾을 수 있습니다.
저는 UTF-8 문제 때문에 xlrd와 운이 좋지 않았습니다.
언급URL : https://stackoverflow.com/questions/2942889/reading-parsing-excel-xls-files-with-python
'programing' 카테고리의 다른 글
멀티프로세싱에서의 공유 메모리 객체 (0) | 2023.07.19 |
---|---|
조건부('if') 문을 기준으로 데이터 프레임의 값 바꾸기 (0) | 2023.07.19 |
파이썬 다중 처리 풀 imap_unordered 호출의 진행 상황을 표시하시겠습니까? (0) | 2023.07.19 |
Windows 7 시스템의 MongoDB:연결할 수 없습니다. (0) | 2023.07.09 |
Oracle PL/SQL : 문자열에서 "공백 문자" 제거 (0) | 2023.07.09 |