2017-01-19 1 views
1

J'essaie d'utiliser xlsxwriter pour créer un fichier Excel et nommer un fichier comme date et heure actuelles. Pour le contexte, je veux ajouter ceci dans un grattoir Web, qui est configuré pour s'exécuter tous les jours à midi et l'exporter vers Excel. Je veux que les noms de fichiers correspondent au temps d'éraflure.Utilisez xlswriter pour nommer un fichier comme date et heure actuelles

J'ai essayé d'utiliser la fonction datetime sans succès:

import xlsxwriter 
import datetime 

# Create a workbook and add a worksheet. 

todays_date = "'" + datetime.datetime.now().strftime("%Y-%m-%d %H:%M") + '.xlsx' + "'" 
workbook = xlsxwriter.Workbook(todays_date) 
worksheet = workbook.add_worksheet() 

# Some data we want to write to the worksheet. 
expenses = (
    ['Rent', 1000], 
    ['Gas', 100], 
    ['Food', 300], 
    ['Gym', 50], 
) 

# Start from the first cell. Rows and columns are zero indexed. 
row = 0 
col = 0 

# Iterate over the data and write it out row by row. 
for item, cost in (expenses): 
    worksheet.write(row, col,  item) 
    worksheet.write(row, col + 1, cost) 
    row += 1 

# Write a total using a formula. 
worksheet.write(row, 0, 'Total') 
worksheet.write(row, 1, '=SUM(B1:B4)') 

workbook.close() 

Est-ce que quelqu'un sait pourquoi cela ne fonctionne pas ou une autre alternative?

@Sandeep Hukku - Code modifié ci-dessous:

import xlsxwriter 
import datetime 

# Create a workbook and add a worksheet. 

# todays_date = "'" + datetime.datetime.now().strftime("%Y-%m-%d %H:%M") + '.xlsx' + "'" 
todays_date = str(datetime.datetime.now().strftime("%Y-%m-%d %H:%M"))+ '.xlsx' 
workbook = xlsxwriter.Workbook(todays_date) 
worksheet = workbook.add_worksheet() 

# Some data we want to write to the worksheet. 
expenses = (
    ['Rent', 1000], 
    ['Gas', 100], 
    ['Food', 300], 
    ['Gym', 50], 
) 

# Start from the first cell. Rows and columns are zero indexed. 
row = 0 
col = 0 

# Iterate over the data and write it out row by row. 
for item, cost in (expenses): 
    worksheet.write(row, col,  item) 
    worksheet.write(row, col + 1, cost) 
    row += 1 

# Write a total using a formula. 
worksheet.write(row, 0, 'Total') 
worksheet.write(row, 1, '=SUM(B1:B4)') 

workbook.close() 

@Snehal Parmar - deuxième mise à jour:

importation urllib importation urllib.request de datetime import import BeautifulSoup import BS4 xlsxwriter

# Web scraping 
def make_soup(url): 
    the_page = urllib.request.urlopen(url) 
    soup_data = BeautifulSoup(the_page, "html.parser") 
    return soup_data 


soup = make_soup('http://www.url.co.uk') 


def getNames(): 
    for record in soup.findAll('tr'): 
     for data in record.findAll('td'): 
      for td_in_data in data.findAll('td', {"class": "propname"}): 
       print(td_in_data.text) 


def getRooms(): 
    for record in soup.findAll('tr'): 
     for data in record.findAll('td'): 
      for td_in_data in data.findAll('span', {"class": "beds"}): 
       print(td_in_data.text) 


def getRents(): 
    for record in soup.findAll('tr'): 
     for data in record.findAll('td'): 
      for td_in_data in data.findAll('td', {"class": "rentprice"}): 
       print(td_in_data.text) 


''' To do: get the scraped data to an Excel doc.''' 

# Create a workbook and add a worksheet. 


todays_date = str(datetime.datetime.now().strftime("%Y-%m-%d %H:%M"))+ '.xlsx' 
todays_date = todays_date.replace(" ", "_").replace(":", "_") 

workbook = xlsxwriter.Workbook(todays_date) 
worksheet = workbook.add_worksheet() 

# Data to Excel. 
Excel_dump = (
    ['Name', getNames()], 
    ['Rent', getRents()], 
    ['Rooms', getRooms()] 
) 

# Start from the first cell. Rows and columns are zero indexed. 
row = 0 
col = 0 


# Iterate over the data and write it out row by row. 
for item, cost in Excel_dump: 
    worksheet.write() 
    worksheet.write(col, row,  item) 
    worksheet.write(col, row + 1) 
    row += 1 

Répondre

1

Je ne suis pas sûr, mais si vous fermez le fichier après l'avoir nommé, puis de nouveau ouvert en mode append, puis ajouter des données dans le fichier qui pourrait faire le travail. Parfois, créer un fichier est opération paresseuse, donc ce qui se passe ici est jusqu'à ce que rien n'est écrit dans le fichier son fichier ne pas créer et aussi le système d'exploitation jouent un rôle important aussi. S'il vous plaît et faites le moi savoir, comme son code web scraper je ne peux pas simuler ici sur ma machine.

Got la question: le problème est avec la partie du temps au nom du fichier, ajouter ce qui suit:

todays_date = todays_date.replace(" ", "_").replace(":", "_") 

ou

todays_date = str(datetime.datetime.now().strftime("%Y-%m-%d_%H_%M"))+ '.xlsx' 

J'espère que cela va résoudre le problème.

+0

Merci @Snehal Parmar - je ne sais pas si c'est possible avec xlsxwriter? – Maverick

+0

l'essayer s'il vous plaît, il est arrivé avec moi une fois quand je vidais des données. Comme vous faites un appel réseau entre le fichier de création et l'écriture du fichier, c'est très possible. –

+0

Merci pour la suggestion, pour le moment je ne suis pas sûr de savoir comment ajouter ceci dans mon code ci-dessus ?! – Maverick

1

Vous avez juste besoin d'écrire todays_date = datetime.datetime.now().strftime("%Y-%m-%d %H:%M") + '.xlsx' au lieu de todays_date = "'" + datetime.datetime.now().strftime("%Y-%m-%d %H:%M") + '.xlsx' + "'"

+0

Merci @Sandeep Hukku - malheureusement, cela ne fonctionne pas, j'avais déjà essayé. Dans les deux cas, je constate qu'il crée un fichier texte nommé date/heure actuelle. – Maverick

+0

j'ai essayé et ça a bien marché pour moi. –

+0

Strange ... Je l'ai juste testé à nouveau et il crée un fichier texte sans données et pas un fichier Excel. – Maverick