pandas read_csv не работает при запуске через cron в Mac OS

У меня есть скрипт на Python, который запускает cron. Скрипт импортирует модуль pandas и используетread_csvчтобы загрузить csv во фрейм данных, а затем сохранить его в другой csv. apath - это абсолютный путь к файлу:

statedata_raw=pd.read_csv(apath+'statedata.csv')
statedata_raw.to_csv(apath+'state_data.csv',index=False)    

Права доступа к файлу csv установлены правильно -rwxr-xr-x

когда я запускаю его в командной строке, все работает нормально. Когда я запускаю его через cron, я получаю следующую ошибку:

Traceback (most recent call last):
  File "/users/maderman/wdtest.py", line 21, in <module>
    statedata_raw=pd.read_csv(apath+'statedata.csv')
  File "/opt/miniconda3/lib/python3.7/site-packages/pandas/io/parsers.py", line 676, in parser_f
    return _read(filepath_or_buffer, kwds)
  File "/opt/miniconda3/lib/python3.7/site-packages/pandas/io/parsers.py", line 448, in _read
    parser = TextFileReader(fp_or_buf, **kwds)
  File "/opt/miniconda3/lib/python3.7/site-packages/pandas/io/parsers.py", line 880, in __init__
    self._make_engine(self.engine)
  File "/opt/miniconda3/lib/python3.7/site-packages/pandas/io/parsers.py", line 1114, in _make_engine
    self._engine = CParserWrapper(self.f, **self.options)
  File "/opt/miniconda3/lib/python3.7/site-packages/pandas/io/parsers.py", line 1891, in __init__
    self._reader = parsers.TextReader(src, **kwds)
  File "pandas/_libs/parsers.pyx", line 374, in pandas._libs.parsers.TextReader.__cinit__
  File "pandas/_libs/parsers.pyx", line 678, in pandas._libs.parsers.TextReader._setup_parser_source
OSError: Initializing from file failed

Я проверил, что сам pandas загружается и что to_csv работает путем замены read_csv. Когда я заменилread_csv со следующим кодом для ручного создания фрейма данных все работало нормально, работало в командной строке и работало в cron:

cat=['a','a','a','a','a','b','b','b','b','b']
val=[1,2,3,4,5,6,7,8,9,10]
columns=['cat','val']
data=[cat,val]
dict={key:value for key,value in zip(columns,data)}
statedata_raw=pd.DataFrame(data=dict)

Я нашел еще одно сообщение, в котором предлагалось передать аргумент engine='python' к read_csv, но это ничего не дало.

Итак, я знаю, что:

  1. cron работает нормально на Python
  2. он может импортировать панды и запускать несколько различных функций панд.
  3. права доступа к файлам в порядке

Проблема, похоже, связана с read_csv команда.

Мы ценим любые предложения.

1 ответ

Решение

Формулировка этого вопроса была неправильной, и все сводилось к проблеме с разрешениями. Здесь был опубликован лучший вопрос, на который дан ответ: /questions/50572510/skript-python-v-cron-ne-chitaet-csv-esli-on-sam-ne-sozdaet-csv

Другие вопросы по тегам