2017-09-01 36 views
0

我試圖寫一個文件,但我收到以下錯誤:類型錯誤:需要對類字節對象,而不是「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的新手

+3

嘗試'文件的字節=打開( 「Basketball.csv」, 「W」)',而不是'文件=打開(「籃球。 csv「,」r + b「) – Gahan

+0

注意:** always **包含一個帶* any * Python問題的通用[python]標籤。可選地包含版本特定標籤。 –

+3

和**始終**包含**完全追溯**,從追溯(最近最後一次調用最後一行)開始:直到異常行,進入問題本身。 –

回答

0

當您在python中打開文件時,您必須指定其「文件模式」 - 只讀,只寫,讀取和寫入,以及文件是否爲二進制文件。因此,在這一行:

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

你打開你的文件爲只讀,並設置將被解讀爲二進制文件。 你應該已經打開了文件:

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

由於寫和STRING

然而,要手動書面方式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數據結構!

+0

也'csv'文檔告訴我們添加'newline ='''以避免問題。 –

0

如果你想寫你必須使它像下面

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