планировщик создает пустые файлы

Я использую pythonanywhere для простой запланированной задачи. Я хочу загружать данные по ссылке один раз в день и сохранять файлы csv. Позже, когда у меня будет приличный временной ряд, я выясню, как я на самом деле хочу управлять данными. Это не так много данных, поэтому не нужно ничего особенного, как база данных.

Мой скрипт берет данные из ссылки на листы Google, добавляет столбец журнала и столбец времени, а затем записывает CSV с датой в имени файла.

Он работает именно так, как я хочу, когда я запускаю его вручную в pythonanywhere, но планировщик просто создает пустые файлы csv, хотя и с правильным именем.

Есть идеи, что случилось? Я не понимаю файл журнала. Наверняка ошибка должна возникать при ручном запуске?

сценарий:

import pandas as pd
import time
import datetime

def write_today(df):
    date = time.strftime("%Y-%m-%d")
    df.to_csv('Properties_'+date+'.csv')


url = 'https://docs.google.com/spreadsheets/d/19h2GmLN-2CLgk79gVxcazxtKqS6rwW36YA-qvuzEpG4/export?format=xlsx'
df = pd.read_excel(url, header=1).rename(columns={'Unnamed: 1':'code'})
source = pd.read_excel(url).columns[0]
df['source'] = source
df['time'] = datetime.datetime.now()
write_today(df)

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

журнальный файл:

Traceback (most recent call last):
  File "/home/abmoore/load_data.py", line 24, in <module>
    write_today(df)
  File "/home/abmoore/load_data.py", line 16, in write_today
    df.to_csv('Properties_'+date+'.csv')
  File "/usr/local/lib/python2.7/dist-packages/pandas/core/frame.py", line 1344, in to_csv
    formatter.save()
  File "/usr/local/lib/python2.7/dist-packages/pandas/formats/format.py", line 1551, in save
    self._save()
  File "/usr/local/lib/python2.7/dist-packages/pandas/formats/format.py", line 1638, in _save
    self._save_header()
  File "/usr/local/lib/python2.7/dist-packages/pandas/formats/format.py", line 1634, in _save_header
    writer.writerow(encoded_labels)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa3' in position 0: ordinal not in range(128)

person AndyMoore    schedule 20.04.2017    source источник


Ответы (1)


Ваша проблема заключается в UnicodeDecodeError - у вас есть некоторые данные, отличные от ascii, в вашей электронной таблице, а функция pandas to_csv по умолчанию использует кодировку ascii. попробуйте вместо этого указать utf8:

def write_today(df):
    filename = 'Properties_{date}.csv'.format(date=time.strftime("%Y-%m-%d"))
    df.to_csv(filename, encoding='utf8')

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_csv.html

person hwjp    schedule 21.04.2017