【问题标题】:how to format excel file using python?如何使用python格式化excel文件?
【发布时间】:2021-03-05 08:41:40
【问题描述】:

我有一个脚本,它使用 beautifulSoup 包从网站列表中抓取数据,并使用 pandas 和 xlsxwriter 包保存在 excel 文件中。

我想要的是能够根据需要格式化 excel 文件,例如 列的宽度

但是当我运行脚本时它崩溃并显示以下错误。

AttributeError: 'NoneType' object has no attribute 'write'

代码:

import pandas as pd

import requests
from bs4 import BeautifulSoup
import xlsxwriter

def scrap_website():
    url_list = ["https://www.bayt.com/en/international/jobs/executive-chef-jobs/",
    "https://www.bayt.com/en/international/jobs/head-chef-jobs/",
    "https://www.bayt.com/en/international/jobs/executive-sous-chef-jobs/"]
    
    joineddd = []
    for url in url_list:
        soup = BeautifulSoup(requests.get(url).content,"lxml")
        links = []
        for a in soup.select("h2.m0.t-regular a"):
            if a['href'] not in links:
                links.append("https://www.bayt.com"+ a['href'])
        
        for link in links:
            s = BeautifulSoup(requests.get(link).content, "lxml") 
            ### update Start ###
            alldd = dict()
            alldd['link'] = link
            dd_div = [i for i in s.select("div[class='card-content is-spaced'] div") 
                    if ('<dd>' in str(i) ) and ( "<dt>" in str(i))]

            for div in dd_div:
                k = div.select_one('dt').get_text(';', True)
                v = div.select_one('dd').get_text(';', True)
                alldd[k] = v
            ### update End  ###    
            joineddd.append(alldd)


# result
        df = pd.DataFrame(joineddd)
        df_to_excel = df.to_excel(r"F:\\AIenv\web_scrapping\\jobDesc.xlsx", index = False, header=True)
        workbook = xlsxwriter.Workbook(df_to_excel)
        worksheet = workbook.add_worksheet()
        worksheet.set_column(0, 0,50)
        workbook.close()

    

错误在哪里以及如何解决?

【问题讨论】:

  • 仅供参考,“废品”是指扔掉。我想你的意思是刮。
  • 是的,谢谢你对我的错误有什么建议吗?
  • 在您的代码中,df 未声明。我想这是来自抓取数据的熊猫数据框。对吗?
  • @JaybePark 我的错误我在这里粘贴代码时将其删除

标签: python pandas beautifulsoup xlsxwriter


【解决方案1】:

要访问和格式化to_excel() 创建的 Excel 工作簿或工作表,您需要先创建一个 ExcelWriter 对象。像这样的:

import pandas as pd


# Create a Pandas dataframe from some data.
df = pd.DataFrame({'Data': [10, 20, 30, 20, 15, 30, 45]})

# Create a Pandas Excel writer using XlsxWriter as the engine.
writer = pd.ExcelWriter('pandas_simple.xlsx', engine='xlsxwriter')

# Convert the dataframe to an XlsxWriter Excel object.
df.to_excel(writer, sheet_name='Sheet1', index=False, header=True)

# Get the xlsxwriter objects from the dataframe writer object.
workbook  = writer.book
worksheet = writer.sheets['Sheet1']

# Set the column width.
worksheet.set_column(0, 0, 50)

# Close the Pandas Excel writer and output the Excel file.
writer.save()

输出:

更多详情请见Working with Python Pandas and XlsxWriter

【讨论】:

    【解决方案2】:
    1. to_excel 函数不返回任何内容。这就是您收到错误消息的原因。
    # save excel file
    excel_file_name = r"jobDesc.xlsx"
    df.to_excel(excel_file_name, index = False, header=True)
    
    # open excel file for change col width or something
    workbook = xlsxwriter.Workbook(excel_file_name)
    
    1. 基本上,您不能使用xlsxwriter 更改现有文件。有一种方法可以这样做,但不建议这样做。我推荐openpyxl 包而不是这个。仅供参考,xlsxwriter: is there a way to open an existing worksheet in my workbook?

    【讨论】:

      猜你喜欢
      • 2018-06-15
      • 1970-01-01
      • 1970-01-01
      • 2017-10-24
      • 2018-06-29
      • 1970-01-01
      • 2018-03-05
      • 2013-11-27
      • 1970-01-01
      相关资源
      最近更新 更多