【问题标题】:Error while writing a file写入文件时出错
【发布时间】:2018-02-10 19:06:47
【问题描述】:

我正在尝试写入文件,但出现以下错误:TypeError: a bytes-like object is required, not 'str'

import requests, pandas
from bs4 import BeautifulSoup

r = requests.get("https://www.basketball-reference.com/players/a/")
c = r.content
soup = BeautifulSoup(c, "html.parser")
full_record_heading = soup.findAll("tr")
full_record = soup.findAll("tr")
playerdata = ""
playerdata_saved = ""
for record in full_record:
    playerdata = ""
    for player in record.findAll("td"):
        playerdata = playerdata +","+player.text
    playerdata_saved = playerdata_saved + playerdata[1:]+("\n")
# print(playerdata_saved)

header="From,To,Pos,Ht,Wt,Birth Date,College"
file=open("Basketball.csv","r+b")
file.write(header)

谁能告诉我错误的原因?我们如何知道任何可用命令和文档的正确语法?我是python新手

【问题讨论】:

  • 试试file=open("Basketball.csv","w")而不是file=open("Basketball.csv","r+b")
  • 注意:总是any Python 问题中包含一个通用 [python] 标签。可选地包含特定于版本的标签。
  • 您要查找的文档是here

标签: python python-3.x


【解决方案1】:

当你在 python 中打开一个文件时,你必须指定它的“文件模式”——只读、只写、读写,以及文件是否为二进制。所以,在这一行:

open("Basketball.csv","r+b")

您以只读方式打开文件,并将文件设置为二进制读取。 您应该以以下方式打开文件:

open("Basketball.csv","w")

作为写和作为字符串

尽管如此,您正在手动编写 CSV 文件 - 在 Pyhton 中您不必这样做!看这个例子:

import requests
import pandas  # Always import in different lines
from bs4 import BeautifulSoup

r = requests.get("https://www.basketball-reference.com/players/a/")
c = r.content
soup = BeautifulSoup(c, "html.parser")
full_record_heading = soup.findAll("tr")
full_record = soup.findAll("tr")

# Initialize your data buffer
my_data = []

# For each observation in your data source
for record in full_record:
    # We extract a row of data
    observation = record.findAll("td")
    # Format the row as a dictionary - a "python hashmap"
    dict_observation = {
        "From": observation[0],
        "To": observation[1],
        "Pos": observation[2],
        "Ht": observation[3],
        "Wt": observation[4],
        "Birth Date": observation[5],
        "College": observation[6]
    }
    # Add the row to our DataFrame buffer
    my_data.append(dict_observation)
# Now our DataFrame buffer contains all our data.
# We can format it as a Pandas DataFrame
dataframe = pandas.DataFrame().from_dict(my_data)

# Pandas DataFrames can be turned into CSVs seamlessly. Like:
dataframe.to_csv("Basketball.csv", index=False)

# Or even MS Excel:
dataframe.to_excel("Basketball.xlsx")

尽可能多地使用 Python 数据结构!

【讨论】:

  • 还有csv 文档告诉我们添加newline='' 以避免出现问题。
【解决方案2】:

如果你想写字节,你必须像下面这样

file.write(bytes(header, encoding="UTF-8"))

【讨论】:

    猜你喜欢
    • 2014-06-08
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    • 2016-12-15
    相关资源
    最近更新 更多