2017-03-03 4 views
3

Ich habe einen Web-Scraper, der eine Excel-Datei für die Scrapes dieses Monats erstellt. Ich möchte das heutige Kratzen und jedes Kratzen für diesen Monat in diese Datei als ein neues Blatt jedes Mal hinzufügen, wenn es ausgeführt wird. Mein Problem war jedoch, dass das vorhandene Blatt nur mit einem neuen Blatt überschrieben wird, anstatt es als separates neues Blatt hinzuzufügen. Ich habe versucht, es mit xlrd, xlwt, Pandas und openpyxl zu tun.Hinzufügen eines Pandas.DataFrame zu einer vorhandenen Excel-Datei

Immer noch brandneu in Python, so wird Einfachheit geschätzt!

Unten ist nur der Code zum Schreiben der Excel-Datei.

# My relevant time variables 
ts = time.time() 
date_time = datetime.datetime.fromtimestamp(ts).strftime('%y-%m-%d %H_%M_%S') 
HourMinuteSecond = datetime.datetime.fromtimestamp(ts).strftime('%H_%M_%S') 
month = datetime.datetime.now().strftime('%m-%y') 

# Creates a writer for this month and year 
writer = pd.ExcelWriter(
    'C:\\Users\\G\\Desktop\\KickstarterLinks(%s).xlsx' % (month), 
    engine='xlsxwriter') 

# Creates dataframe from my data, d 
df = pd.DataFrame(d) 

# Writes to the excel file 
df.to_excel(writer, sheet_name='%s' % (HourMinuteSecond)) 
writer.save() 
+3

http://openpyxl.readthedocs.io/en/default/tutorial.html - zeigt Ihnen oben, wie Sie ein neues Blatt erstellen – ryugie

Antwort

3

Pandas hat eine open feature request dafür.

In der Zwischenzeit, hier ist eine Funktion, die eine pandas.DataFrame zu einer vorhandenen Arbeitsmappe fügt hinzu:

Code:

def add_frame_to_workbook(filename, tabname, dataframe, timestamp): 
    """ 
    Save a dataframe to a workbook tab with the filename and tabname 
    coded to timestamp 

    :param filename: filename to create, can use strptime formatting 
    :param tabname: tabname to create, can use strptime formatting 
    :param dataframe: dataframe to save to workbook 
    :param timestamp: timestamp associated with dataframe 
    :return: None 
    """ 
    filename = timestamp.strftime(filename) 
    sheet_name = timestamp.strftime(tabname) 

    # create a writer for this month and year 
    writer = pd.ExcelWriter(filename, engine='openpyxl') 

    try: 
     # try to open an existing workbook 
     writer.book = load_workbook(filename) 

     # copy existing sheets 
     writer.sheets = dict(
      (ws.title, ws) for ws in writer.book.worksheets) 
    except IOError: 
     # file does not exist yet, we will create it 
     pass 

    # write out the new sheet 
    dataframe.to_excel(writer, sheet_name=sheet_name) 

    # save the workbook 
    writer.save() 

Testcode:

import datetime as dt 
import pandas as pd 
from openpyxl import load_workbook 

data = [x.strip().split() for x in """ 
        Date Close 
    2016-10-18T13:44:59 2128.00 
    2016-10-18T13:59:59 2128.75 
""".split('\n')[1:-1]] 
df = pd.DataFrame(data=data[1:], columns=data[0]) 

name_template = './sample-%m-%y.xlsx' 
tab_template = '%d_%H_%M' 
now = dt.datetime.now() 
in_an_hour = now + dt.timedelta(hours=1) 
add_frame_to_workbook(name_template, tab_template, df, now) 
add_frame_to_workbook(name_template, tab_template, df, in_an_hour) 

(Source)

+0

DANKE! Das sieht nach einer sehr gut geschriebenen Funktion aus. Hat genau das gemacht, wozu ich es brauchte. Du bist der Mann Stephen! –

Verwandte Themen