Возможность коррупции: чтение файлов Excel с помощью Pandas - PullRequest
3 голосов
/ 04 апреля 2019

Мы находимся в стадии разработки продукта.Идея состоит в том, что код будет считывать список значений из Excel в SQL.

Требования заключаются в следующем:

  1. Доступ к книге может быть получен несколькими пользователями за пределаминаша программа

  2. Рабочая книга должна оставаться доступной (т.е. не быть поврежденной), если что-то плохое случится во время работы нашей программы

  3. Программа будет выполнена, когдав файле нет пользователей

Сейчас мы рассматриваем возможность использования pandas простым способом:

    import pandas as pd
    from pandas import ExcelWriter
    from pandas import ExcelFile

    df = pd.read_excel('File.xlsx', sheetname='Sheet1')

    """Some code to write df in to SQL"""

Если этот код отключается отExcel все еще открыт, есть ЛЮБАЯ вероятность того, что файл останется заблокированным где-то в моей программе или будет поврежден?

Чтобы уточнить, мы предполагаем что-то катастрофическое, например, сбой или потеря питания сервера.

Поисквокруг, но не смог найти похожий вопрос, пожалуйста, перенаправьте меня, если необходимо.Я также прочитал документацию Pandas read_excel здесь: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_excel.html

1 Ответ

1 голос
/ 04 апреля 2019

С предоставленным вами кодом, из моего прочтения кода панд и xlrd, данный файл будет открыт только в режиме чтения.Насколько мне известно, это должно означать, что в том, что вы делаете, нет больше риска, чем в чтении файла любым другим способом - и вы должны прочитать его, чтобы использовать его, в конце концов.

Если это не достаточно вас успокаивает, вы можете минимизировать время открытия файла и, что более важно, не подвергать свой файл внешнему коду, передавая пандам объект BytesIO вместо пути:

import io
import pandas as pd

data = io.BytesIO(open('File.xlsx', 'rb').read())
df = pd.read_excel(data, sheetname='Sheet1')

# etc

Таким образом, ваш файл будет открыт только на время, необходимое для чтения его в память, а pandas и xlrd будут работать только с копией данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...