Python错误:需要类似字节的对象,而不是';str';
在FBCrawl.py中调用data_storage.py中的函数data_save_csv(在.csv文件中写入数据),但它的错误:TypeError:需要像object这样的字节,而不是'str',您能告诉我如何解决它吗 FBCrawl.py:Python错误:需要类似字节的对象,而不是';str';,python,csv,Python,Csv,在FBCrawl.py中调用data_storage.py中的函数data_save_csv(在.csv文件中写入数据),但它的错误:TypeError:需要像object这样的字节,而不是'str',您能告诉我如何解决它吗 FBCrawl.py: header = ["id","name","administrator"] data_storage.data_save_csv("group_members",group_info_result,"1610393525875114",header
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)
错误:
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
C:\Python\Python36\Python.exe
C:/Python/PyCharmProject/FaceBookCrawl/FBCrawl.py
1060327860756932 | Qp-F2RNWU n5HxrVPP2saNJA4PB0
回溯(最近一次呼叫最后一次):
文件“C:/Python/PyCharmProject/FaceBookCrawl/FBCrawl.py”,第225行,在
数据存储。数据保存csv(“组成员”,组信息结果,“1610393525875114”,标题)
文件“C:\Python\PyCharmProject\FaceBookCrawl\data\u storage.py”,第43行,位于数据保存csv中
writer.writerow(标题)
TypeError:需要类似字节的对象,而不是“str”
进程已完成,退出代码为1
写入程序引用的CSV文件是使用wb
(写入二进制)标志打开的,这意味着您必须使用字节数组对其进行写入
写入时,只需将标题
转换为字节数组:
writer.writerow(header.encode())
您也可以仅使用
w
标志打开文件(这将允许您写入字符串):
写入程序引用的CSV文件是使用
wb
(写入二进制)标志打开的,这意味着您必须使用字节数组对其进行写入
写入时,只需将标题
转换为字节数组:
writer.writerow(header.encode())
您也可以仅使用
w
标志打开文件(这将允许您写入字符串):
如果您使用的是python3,那么写入模式应该是“w”,而不是“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
>>>
导入csv
>>>标题=['ab','cd']
>>>以open('out.csv','wb')作为f:
... writer=csv.writer(f)
... writer.writerow(标题)
...
回溯(最近一次呼叫最后一次):
文件“”,第3行,在
TypeError:需要类似字节的对象,而不是“str”
>>>将open('out.csv','w',newline='')作为f:
... writer=csv.writer(f)
... writer.writerow(标题)
...
7.
>>>
“wb”是二进制模式,因此python3假设您将通过testrings编码写入文件w'是文本模式,因此python3需要unicode字符串,这是标题列表所包含的字符串。如果使用python3,则写入模式应为“w”,而不是“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
>>>
导入csv
>>>标题=['ab','cd']
>>>以open('out.csv','wb')作为f:
... writer=csv.writer(f)
... writer.writerow(标题)
...
回溯(最近一次呼叫最后一次):
文件“”,第3行,在
TypeError:需要类似字节的对象,而不是“str”
>>>将open('out.csv','w',newline='')作为f:
... writer=csv.writer(f)
... writer.writerow(标题)
...
7.
>>>
“wb”是二进制模式,因此python3假设您将通过testrings编码写入文件w'是文本模式,因此python3需要unicode字符串,这就是标题列表所包含的字符串。就是这样。完全错过了Python3。谢谢@Snakecharmerb就是这样。完全错过了Python3。谢谢@snakecharmerb