Python 错误 :a bytes-like object is required, 不是 'str'

标签 python csv

在FBCrawl.py中调用data_storage.py中的函数data_save_csv(write data in .csv file),但是报错:TypeError: a bytes-like object is required, not 'str',请问如何解决它

FBCrawl.py:

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

数据存储.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)

错误:

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

最佳答案

作者引用的 CSV 文件是使用 wb(写入二进制)标志打开的,这意味着您必须使用字节数组写入它。

编写时只需将 header 转换为字节数组:

writer.writerow(header.encode())

您也可以仅使用 w 标志打开文件(这将允许您编写字符串):

open(csv_file_directory, 'w')

关于Python 错误 :a bytes-like object is required, 不是 'str',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41554961/

相关文章:

python - Django REST Framework Browsable API 的不同版本控制方案

python - 为什么数据框中的日期分配不是日期类型?

python - Python 中的字符串或列表替换

mysql - 从 CSV 导入部分数据到 MySQL

Python从列表列表中删除空元素

ruby - 延迟编写 Ruby 中每个 X 数组项的脚本

java - 如何暂时关闭 java gwt 服务器端的缓冲读取器?

python - 值错误 : sampler option is mutually exclusive with shuffle pytorch

python - 值错误: could not convert string to float: 'FEE'

android - kivy:水平ListView