Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果文件在excel中打开,pd.read\u excel将抛出PermissionError_Python_Excel_Pandas - Fatal编程技术网

Python 如果文件在excel中打开,pd.read\u excel将抛出PermissionError

Python 如果文件在excel中打开,pd.read\u excel将抛出PermissionError,python,excel,pandas,Python,Excel,Pandas,每当我在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 = p

每当我在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>'
回溯(最近一次呼叫最后一次):
文件“C:\Users\Public\a.py”,第53行,在
main()
文件“C:\Users\Public\workspace\a.py”,第47行,主目录
blend=plStream(rootDir);
plStream中第20行的文件“C:\Users\Public\workspace\a.py”
df=pd.read\u excel(fPath,sheetname=“线性策略”,index\u col=“日期”,parse\u dates=True)
文件“C:\Users\Public\Continuum\Anaconda35\lib\site packages\pandas\io\excel.py”,第163行,在read\u excel中
io=ExcelFile(io,engine=engine)
文件“C:\Users\Public\Continuum\Anaconda35\lib\site packages\pandas\io\excel.py”,第206行,在\uuu init中__
self.book=xlrd.open_工作簿(io)
文件“C:\Users\Public\Continuum\Anaconda35\lib\site packages\xlrd\\ uuuuuu init\uuuuuu.py”,第394行,在OpenU工作簿中
f=打开(文件名为“rb”)
PermissionError:[Errno 13]权限被拒绝:“”

您可以设置
引擎='xlrd'
,然后在Excel打开文件时运行代码

df = pd.read_excel(filename, sheetname, engine = 'xlrd')

您可能需要
pip安装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
导入系统 导入win32com.client xlApp=win32com.client.Dispatch(“Excel.Application”) 打印“Excel库版本:”,xlApp.version
filename,password=您可以设置engine='python',然后即使文件打开也可以运行它


df=pd.read_excel(文件名,引擎='python')

我建议改用xlwings模块,它允许更强大的功能

首先,您需要使用以下行加载工作簿:

如果电子表格与python脚本位于同一文件夹中:

import xlwings as xw
workbook = xw.Book('myfile.xls')
或者:

workbook = xw.Book('"C:\Users\...\myfile.xls')
然后,通过指定电子表格中的工作表和数据集开始的单元格,可以创建数据框:

df = workbook.sheets[0].range('A1').options(pd.DataFrame, 
                                            header=1,
                                            index=False, 
                                            expand='table').value
指定图纸时,可以通过名称或位置(即第一个、第二个等)按以下方式指定图纸:

workbook.sheets[0]
workbook.sheets['sheet\u name']


最后,您可以使用
Pip install xlwings

简单地安装xlwings模块。一般来说,Excel在打开文件时有很多限制(不能打开同一个文件两次,不能打开两个同名文件..等等)。
我没有excel在机器上进行测试,但检查文档中的内容时,我注意到它允许您设置
引擎

从您发布的堆栈跟踪来看,错误似乎是由熊猫使用的默认引擎
xlrd
引发的

试着使用其他任何一种

支持的引擎:“xlrd”、“openpyxl”、“odf”、“pyxlsb”,默认为“xlrd”

所以试着用剩下的,比如

df=pd.read\u excel(fPath,sheetname=“线性策略”,index\u col=“date”,parse\u dates=True,engine=“openpyxl”)

我知道这不是一个真正的答案,但您可能希望向pandas或xlrd团队提交错误报告。

您的代码中基本没有问题。[如果发布代码,将更容易。]
您需要更改正在使用的目录的权限,以便所有用户都具有读写权限。

我只需关闭打开的.xlsx文件即可修复此错误。

我可能在这里没有说清楚。问题恰恰是,当文件在Excel中打开时,它会给我这个错误,我的问题是为什么。这不是只读操作吗?对不起,我错过了那部分。是的,如果Excel文件在Excel中打开,您甚至无法读取它。您可以尝试使用文件URL,例如
file://localhost/path/to/workbook.xlsx
看看是否有帮助。@Selcuk:实际上,您可以阅读Excel中打开的工作簿,具体取决于您的方法。例如,如果您直接(而不是通过熊猫)使用
xlrd
,您可以这样做;如果你也能分享这个片段,那将非常有帮助。pd.read_excel()即使在MS excel中打开文件后也不会报告任何权限问题(在Windows 10上,Anaconda python=3.5.6、pandas=0.23.4和xlrd=1.2.0)。此解决方案对我不起作用-我得到了相同的权限错误。“未知引擎:python”工作得很好-你能解释代码中的步骤吗?