in FBCrawl.py call the function data_save_csv(write data in .csv file) in data_storage.py, but it errors:TypeError: a bytes-like object is required, not 'str', could you please tell me how to solve it
FBCrawl.py:
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)
error:
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
You CSV file to which the writer refers was opened with a wb
(write binary) flag, which means you have to use byte arrays to write to it.
Just convert header
to byte array when you write:
writer.writerow(header.encode())
You can alternatively open the file using only w
flag (that will allow you to write strings):
open(csv_file_directory, 'w')
If you are using python3, the write mode should be 'w', not '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', newline='') as f:
... writer = csv.writer(f)
... writer.writerow(headers)
...
7
>>>
'wb' is binary mode , so python3 assumes that you will be writing encoded bytestrings to your file; 'w' is text mode , so python3 expects unicode strings, which is what your header list contains.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.