【问题标题】:Use xlswriter to name a file as current date and time使用 xlswriter 将文件命名为当前日期和时间
【发布时间】:2017-01-19 11:06:48
【问题描述】:

我正在尝试使用 xlsxwriter 创建一个 excel 文件并将文件命名为当前日期和时间。对于上下文,我想将其添加到网络爬虫中,该爬虫设置为每天中午运行并将其导出到 Excel。我希望文件名与抓取时间相对应。

我尝试使用 datetime 函数没有成功:

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()

有谁知道为什么这不起作用或其他替代方法?

@Sandeep Hukku - 编辑代码如下:

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 - 第二次更新:

导入 urllib 导入 urllib.request 从 bs4 导入 BeautifulSoup 导入日期时间 导入 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

【问题讨论】:

    标签: python datetime xlsxwriter


    【解决方案1】:

    我不确定,但如果您在命名文件后关闭文件,然后再次以附加模式打开,然后将数据添加到文件中,可能会完成这项工作。有时创建文件是惰性操作,所以这里发生的情况是,直到没有任何内容写入文件,它才不是创建文件,操作系统也起着重要作用。请让我知道,因为它的网络爬虫代码我无法在我的机器上模拟。

    遇到了问题: 问题在于文件名中的时间部分, 添加以下内容:

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

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

    我希望这能解决问题。

    【讨论】:

    • 感谢@Snehal Parmar - 不确定 xlsxwriter 是否可行?
    • 请尝试一下,我在转储一些数据时发生过一次。当您在创建文件和写入文件之间进行网络调用时,很有可能。
    • 感谢您的建议,目前我不确定如何将其添加到我上面的代码中?!
    • 请检查我对答案所做的修改,它肯定会起作用。
    • 如果我用刮刀发布完整的代码,你介意看一下吗?最好能得到你的想法!
    【解决方案2】:

    你只需要写 todays_date = datetime.datetime.now().strftime("%Y-%m-%d %H:%M") + '.xlsx' 而不是 todays_date = "'" + datetime.datetime.now().strftime("%Y-%m-%d %H:%M") + '.xlsx' + "'"

    【讨论】:

    • 谢谢@Sandeep Hukku - 不幸的是这不起作用,我已经尝试过了。在这两种情况下,我发现它创建了一个名为当前日期/时间的文本文件。
    • 奇怪...刚刚再次测试它,它创建了一个没有数据的文本文件,而不是 Excel 文件。
    • 你能不能尝试一下todays_date = str(datetime.datetime.now().strftime("%Y-%m-%d %H:%M") )+ '.xlsx'。这可能会解决您的问题。如果这对您有帮助,请告知。
    • 再次尝试,仍然创建为文本文件而不是 Excel。在下面添加了更新的代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-06
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多