Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.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临时文件| NamedTemporaryFile可以';不要使用生成的临时文件_Python_Openpyxl_Temporary Files - Fatal编程技术网

python临时文件| NamedTemporaryFile可以';不要使用生成的临时文件

python临时文件| NamedTemporaryFile可以';不要使用生成的临时文件,python,openpyxl,temporary-files,Python,Openpyxl,Temporary Files,我想加载临时文件进行更改,或者只是能够将其上传到某个地方, 当我尝试这样做时,它抛出一个错误,如下所示 我已经将权限设置为w+——理想情况下,它应该允许我阅读和写作,不确定我在这里遗漏了什么——任何帮助都将不胜感激——谢谢 >>> from openpyxl import load_workbook >>> from tempfile import NamedTemporaryFile >>> import os

我想加载临时文件进行更改,或者只是能够将其上传到某个地方, 当我尝试这样做时,它抛出一个错误,如下所示

我已经将权限设置为w+——理想情况下,它应该允许我阅读和写作,不确定我在这里遗漏了什么——任何帮助都将不胜感激——谢谢

>>> from openpyxl import load_workbook
>>> from tempfile import NamedTemporaryFile
>>> import os                     
>>> with NamedTemporaryFile(suffix=".xlsx", mode='w+', delete=True) as tmp:
...     temp_path = tmp.name                
...     os.path.exists(temp_path)           
...     wb = load_workbook(temp_path)       
... 
True
Traceback (most recent call last):
  File "<stdin>", line 4, in <module>
  File "C:\Users\my_name\VS_PROJECTS\.venv\lib\site-packages\openpyxl\reader\excel.py", line 315, in load_workbook
    reader = ExcelReader(filename, read_only, keep_vba,
  File "C:\Users\my_name\VS_PROJECTS\.venv\lib\site-packages\openpyxl\reader\excel.py", line 124, in __init__
    self.archive = _validate_archive(fn)
  File "C:\Users\my_name\VS_PROJECTS\.venv\lib\site-packages\openpyxl\reader\excel.py", line 96, in _validate_archive
    archive = ZipFile(filename, 'r')
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.8_3.8.2288.0_x64__qbz5n2kfra8p0\lib\zipfile.py", line 1251, in __init__
    self.fp = io.open(file, filemode)
PermissionError: [Errno 13] Permission denied: 'C:\\Users\\my_name\\AppData\\Local\\Temp\\tmp5dsrqegj.xlsx'
来自openpyxl导入加载\u工作簿的
>>
>>>从tempfile导入NamedTemporaryFile
>>>导入操作系统
>>>将NamedTemporaryFile(后缀=.xlsx),模式='w+',删除=True)作为tmp:
...     temp_path=tmp.name
...     存在操作系统路径(临时路径)
...     wb=加载工作簿(临时路径)
... 
真的
回溯(最近一次呼叫最后一次):
文件“”,第4行,在
加载工作簿中的文件“C:\Users\my\u name\VS\u PROJECTS\.venv\lib\site packages\openpyxl\reader\excel.py”,第315行
reader=ExcelReader(文件名、只读、保留vba、,
文件“C:\Users\my\u name\VS\u PROJECTS\.venv\lib\site packages\openpyxl\reader\excel.py”,第124行,在\uu init中__
self.archive=\u validate\u archive(fn)
文件“C:\Users\my\u name\VS\u PROJECTS\.venv\lib\site packages\openpyxl\reader\excel.py”,第96行,在\u validate\u归档文件中
archive=ZipFile(文件名'r')
文件“C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.8_3.8.2288.0_x64_uuuQBZ5N2KFRA8P0\lib\zipfile.py”,第1251行,在uuu init中__
self.fp=io.open(文件、文件模式)
PermissionError:[Errno 13]权限被拒绝:“C:\\Users\\my\u name\\AppData\\Local\\Temp\\tmp5dsrqegj.xlsx”

很明显,你在Windows上

在Windows上,当O_临时文件仍处于打开状态时,无法打开该文件的另一个句柄(例如,请参见)

您需要使用
delete=False
并手动清理,例如

try:
    with NamedTemporaryFile(suffix=".xlsx", mode='w+', delete=True) as tmp:
       temp_name = fp.name
       # ...
finally:
    try:
        os.unlink(temp_name)
    except Exception:
        pass

除了permissions问题外,这篇文章可能会有所帮助,因为openpyxl将无法读取空文件。@CharlectLark我同意,我已经尝试使用工作簿并保存文件“`…temp_path=tmp.name+'.xlsx'…os.path.exists(temp_path)…wb=workbook()…wb.save(temp_path)“``谢谢您的回复,我知道我必须按照建议手动清理:)