2017-01-09 12 views
1

FBCrawl.pyの関数data_save_csv(.csvファイルのデータをwrite)をdata_storage.pyで呼び出しますが、エラー:TypeError:バイトのようなオブジェクトPythonエラー: 'str'ではなく、バイトのようなオブジェクトが必要です

header = ["id","name","administrator"] 
data_storage.data_save_csv("group_members",group_info_result,"1610393525875114",header) 

data_storage.py:

#write data in .csv file 
def data_save_csv(type,data,id_name,header,since = None): 
    #get the date when storage data 
    date_storage() 
    #create the data storage directory 
    csv_parent_directory = os.path.join("dataset","csv",type,glovar.date) 
    directory_create(csv_parent_directory) 
    #write data in .csv 
    if type == "group_members": 
     csv_file_prefix = "gm" 
    if since: 
     csv_file_name = csv_file_prefix + "_" + since.strftime("%Y%m%d-%H%M%S") + "_" + time_storage() + id_name + ".csv" 
    else: 
     csv_file_name = csv_file_prefix + "_" + time_storage() + "_" + id_name + ".csv" 
    csv_file_directory = os.path.join(csv_parent_directory,csv_file_name) 

    with open(csv_file_directory,'wb') as csvfile: 
     writer = csv.writer(csvfile,delimiter=',',quotechar='"',quoting=csv.QUOTE_MINIMAL) 

     #csv header 

     writer.writerow(header) 

     row = [] 
     for i in range(len(data)): 
      for k in data[i].keys(): 
       row.extend(data[i][k]) 
       writer.writerow(row) 

エラー:

'をstr' は、あなたがFBCrawl.pyそれを解決する方法を

を教えてください可能性が、ありませんが必要です

C:\Python\Python36\python.exe  
C:/Python/PyCharmProject/FaceBookCrawl/FBCrawl.py 
1060327860756932|Qp-F2RNW_n5HxrVPP2saNJA4PB0 
Traceback (most recent call last): 
File "C:/Python/PyCharmProject/FaceBookCrawl/FBCrawl.py", line 225, in <module> 
data_storage.data_save_csv("group_members",group_info_result,"1610393525875114",header) 
File "C:\Python\PyCharmProject\FaceBookCrawl\data_storage.py", line 43, in data_save_csv 
writer.writerow(header) 
TypeError: a bytes-like object is required, not 'str' 

Process finished with exit code 1 

答えて

2

ライターが参照するCSVファイルは、wb(バイナリ書き込み)フラグで開かれました。つまり、書き込みにはバイト配列を使用する必要があります。

ちょうどあなたが書く時にバイト配列にheaderを変換:

writer.writerow(header.encode()) 

あなたが代わりにのみwフラグを使用してファイルを開くことができますが(それはあなたが文字列を書くことができます):

open(csv_file_directory, 'w') 
2

python3を使用している場合、書き込みモードは 'wb'でなく 'wb'でなければなりません。

>>> import csv 
>>> headers = ['ab', 'cd'] 
>>> with open('out.csv', 'wb') as f: 
...  writer = csv.writer(f) 
...  writer.writerow(headers) 
... 
Traceback (most recent call last): 
    File "<stdin>", line 3, in <module> 
TypeError: a bytes-like object is required, not 'str' 


>>> with open('out.csv', 'w') as f: 
...  writer = csv.writer(f) 
...  writer.writerow(headers) 
... 
7 
>>> 

「WBが」バイナリモードなので、のpython3はあなたのファイルにエンコードされたバイト文字列を書き込むことになることを想定しています。 'w'はのテキストモードです。したがって、python3はヘッダリストに含まれるUnicode文字列を想定しています。

+0

それでした。 Python3のために完全にそれを逃した。ありがとう@snakecharmerb –

関連する問題