2017-03-02 11 views
1

これは私がリストにデータを追加する際にエラーが発生しました。

w = open("C:\\Users\\kp\\Desktop\\example.csv", "w+") 
writer = csv.writer(w) 
write_to = "" 
for com in soup.find_all("div", {"class" : "commentlist first jsUserAction"}): 
    for com1 in com.find_all("div", {"class" : "text"}): 
     for com2 in com1.find_all("div" , {"class" : "user-review"}): 
      u_name = com2.find("div", {"class" : "_reviewUserName"}) 
      u_rev = com2.find("p") 
      print(u_name.text) 
      print(u_rev.text) 
      write_to.append(u_name.text) 
      write_to.append(u_rev.text) 

writer.write(write_to) 

with-働いている私の目標は、出力を保存するためのコードである - ファイルに、u_name.textとu_rev.textは「write_to」で指されます。

私は次のエラーを取得する -

​​
+1

'write_to'は' list'ではなく 'str'です。 –

+0

'write_to'変数はあなたが投稿したコードのどこにでも宣言されていません。それがリストであることを確認してください – Guillaume

+0

また、投稿したコードのインデントを確認してください – Guillaume

答えて

1

問題は、あなたが文字列にappendしようとしているです。文字列には関数appendはありません。これはリスト関数です。 write_toが文字列であると仮定すると、以下のいずれかの方法を使用して文字列を連結できます。

あなたは、単純な連結を使用して文字列に連結することができます:

write_to += u_name.text 

別のオプションは、文字列関数joinを使用することです。これは次のようになります。

write_to = "".join([write_to, u_name.text]) 

結合がより効率的であると報告されます。結合を使用:

w = open("C:\\Users\\kp\\Desktop\\example.csv", "w+") 
writer = csv.writer(w) 
write_list = [] 
for com in soup.find_all("div", {"class" : "commentlist first jsUserAction"}): 
    for com1 in com.find_all("div", {"class" : "text"}): 
     for com2 in com1.find_all("div" , {"class" : "user-review"}): 
      u_name = com2.find("div", {"class" : "_reviewUserName"}) 
      u_rev = com2.find("p") 
      print(u_name.text) 
      print(u_rev.text) 
      write_list.append(u_name.text) 
      write_list.append(u_rev.text) 

write_to = "".join(write_list); 
writer.write(write_to) 

あなたは間違ってcsvライターを使用しているようですが、あなたは各行の2カンマ区切り持っていると仮定:u_name.textu_rev.textを、あなたは次のようにwriterowを使用してファイルに書き込むことができます。

w = open("C:\\Users\\kp\\Desktop\\example.csv", "w+") 
try: 
    writer = csv.writer(w) 
    for com in soup.find_all("div", {"class" : "commentlist first jsUserAction"}): 
     for com1 in com.find_all("div", {"class" : "text"}): 
      for com2 in com1.find_all("div" , {"class" : "user-review"}): 
       u_name = com2.find("div", {"class" : "_reviewUserName"}) 
       u_rev = com2.find("p") 
       print(u_name.text) 
       print(u_rev.text) 
       writer.write_row((u_name.text, u_rev.text)) 
finally: 
    w.close() 

はここで連結した文字列の異なる方法およびそれらの相対的な効率性について語ったリンクです。 https://waymoot.org/home/python_string/

+0

私は 'join'を試みましたが、実際にファイルに書き込まれるものは何もありません。 – Shantanu

+0

おそらくあなたはそれを正しく使用していないでしょう。上記の私の編集した 'join'の使い方の記事を見てください。私が間違っていなければ、あなたはCSVライターを正しく使用していません。ファイルに書き込むために 'writerow'を呼びたいと思っています。例えば、 'writer.writerow((u_name.text、u_rev.text)'は、ファイルの各行に2つのコンマ区切りの値があると仮定しています。私の元の投稿)。 – dwhite5914

関連する問題