파일이 Excel로 열려 있는 경우 pd.read_excel이 PermissionError를 발생시킵니다.
파일을 Excel로 열고 코드를 실행할 때마다 다음과 같은 오류가 발생하는데, 이는 read_excel이 읽기 전용 작업이어야 하고 파일 잠금을 해제할 필요가 없다고 생각했기 때문입니다.
Traceback (most recent call last):
File "C:\Users\Public\a.py", line 53, in <module>
main()
File "C:\Users\Public\workspace\a.py", line 47, in main
blend = plStream(rootDir);
File "C:\Users\Public\workspace\a.py", line 20, in plStream
df = pd.read_excel(fPath, sheetname="linear strategy", index_col="date", parse_dates=True)
File "C:\Users\Public\Continuum\Anaconda35\lib\site-packages\pandas\io\excel.py", line 163, in read_excel
io = ExcelFile(io, engine=engine)
File "C:\Users\Public\Continuum\Anaconda35\lib\site-packages\pandas\io\excel.py", line 206, in __init__
self.book = xlrd.open_workbook(io)
File "C:\Users\Public\Continuum\Anaconda35\lib\site-packages\xlrd\__init__.py", line 394, in open_workbook
f = open(filename, "rb")
PermissionError: [Errno 13] Permission denied: '<Path to File>'
일반적으로 Excel은 파일을 열 때 많은 제한이 있습니다(같은 파일을 두 번 열 수 없고, 같은 이름의 두 개의 다른 파일을 열 수 없음 등).
테스트할 수 있는 머신에 뛰어난 기능은 없지만 read_excel에 대한 문서를 확인하고 있습니다.이것에 의해, 다음의 설정을 할 수 있는 것을 알 수 있습니다.engine
.
업로드한 스택트레이스를 보면 에러가 에러에 의해xlrd
팬더들이 사용하는 기본 엔진입니다.
다른 것 중 하나를 사용해 보다
지원되는 엔진: "xlrd", "openpyxl", "odf", "pyxlsb", 기본 "xlrd"
나머지 부분까지 시도해봐
df = pd.read_excel(fPath, sheetname="linear strategy", index_col="date", parse_dates=True, engine="openpyxl")
이게 진짜 답이 아닌 건 알지만, 판다나 xlrd 팀에 버그 보고서를 제출하는 게 좋을 것 같아요.
회피책으로 파이썬이 원본 파일의 복사본을 만들고 복사본에서 읽을 것을 제안합니다.그 후 코드는 복사된 파일을 삭제합니다.그것은 약간의 추가 일이지만 효과가 있을 것이다.
예
import shutil
shutil.copy("C://Test//Test.xlsx", "C://Test//koko.xlsx")
대신 xlwings 모듈을 사용하면 더 큰 기능을 사용할 수 있습니다.
먼저 다음 행을 사용하여 워크북을 로드해야 합니다.
스프레드시트가 python 스크립트와 동일한 폴더에 있는 경우:
import xlwings as xw
workbook = xw.Book('myfile.xls')
대체 방법:
workbook = xw.Book('"C:\Users\...\myfile.xls')
그런 다음 스프레드시트 내 시트와 데이터셋이 시작되는 셀을 지정하여 Panda DataFrame을 생성할 수 있습니다.
df = workbook.sheets[0].range('A1').options(pd.DataFrame,
header=1,
index=False,
expand='table').value
시트를 지정할 때 다음과 같은 방법으로 이름 또는 위치(예: 첫 번째, 두 번째 등)로 시트를 지정할 수 있습니다.
workbook.sheets[0]
또는workbook.sheets['sheet_name']
마지막으로 xlwings 모듈을 설치하기 위해서는Pip install xlwings
당신의 코드에는 거의 문제가 없습니다.[코드를 공개하면 더 쉬워집니다]모든 사용자가 읽기 및 쓰기 권한을 가지도록 사용 중인 디렉토리의 권한을 변경해야 합니다.
작업 디렉토리를 설정하고 나서 파일을 열어 이 작업을 실행했습니다.공유 드라이브 권한 및 read_excel 기능과 관련이 있을 수 있습니다.
import os
import pandas as pd
os.chdir("c:\\Users\\...\\")
filepath = "...\\filename.xlsx"
sheetname = 'sheet1'
df_xls = pd.read_excel(filepath, sheet_name=sheetname, engine='openpyxl')
이 오류를 수정하려면 열려 있던 .xlsx 파일을 닫기만 하면 됩니다.
설정할 수 .engine = 'xlrd'
Excel이 파일을 열고 있는 동안 코드를 실행할 수 있습니다.
df = pd.read_excel(filename, sheetname, engine = 'xlrd')
할 수도 요.pip install xlrd
또한 파일에 암호가 있는지 확인할 수 있습니다.또는 다음 코드를 사용하여 필요한 암호로 파일을 열 수도 있습니다.
import sys
import win32com.client
xlApp = win32com.client.Dispatch("Excel.Application")
print "Excel library version:", xlApp.Version
filename, password = <-- enter your own filename and password
xlwb = xlApp.Workbooks.Open(filename, Password=password)
# xlwb = xlApp.Workbooks.Open(filename)
xlws = xlwb.Sheets([insert number here]) # counts from 1, not from 0
print xlws.Name
print xlws.Cells(1, 1) # that's A1
engine='filename'을 설정하면 파일이 열려 있어도 실행할 수 있습니다.
df = pd.read_module(오류, 엔진 = '오류')
언급URL : https://stackoverflow.com/questions/35743905/pd-read-excel-throws-permissionerror-if-file-is-open-in-excel
'programing' 카테고리의 다른 글
iOS 6 앱 - iPhone 5 화면 크기에 대처하는 방법 (0) | 2023.04.12 |
---|---|
유닛 테스트에서의 WPF 디스패처 사용 (0) | 2023.04.12 |
.svn 디렉토리를 무시하려면 어떻게 해야 하나요? (0) | 2023.04.12 |
값을 기준으로 개체를 제거할 어레이 확장 (0) | 2023.04.12 |
개체 배열에서 속성 값 배열 가져오기 (0) | 2023.04.12 |