根本原因是Python版本问题python2.x中要求用‘wb’,python3.x中要求用’w’

首先声明:CSV文件是可以用二进制模式写入的

python文档(传送门)关于CSV的一个用法示例:

文件打开的mode是“wb”

with open('rent.csv','wb') as csv_file:

且与Pythone3里面字符串和二进制数据是两种类型,所以要将str类型转换成bytes类型

出错部分代码

#把str类型的housetitle、house_location、house_money编码成bytes类型

house_title = house_title.encode("utf8")

house_location = house_location.encode("utf8")

house_money = house_money.encode("utf8")

house_url = house_url.encode("utf8")

#查看house_title等的类型

print(type(house_title),type(house_location),type(house_money),type(house_url))

# 向csv文件写入数据

with open('rent.csv','wb') as csv_file:

csv_writer = csv.writer(csv_file,delimiter=',')

csv_writer.writerow([house_title, house_location, house_money, house_url])

错误提示

可以看到这里输出的house_title, house_location, house_money, house_url类型都是bytes

然而下面还是报了类型错误

Please Tell Me Why?

主程序全部代码

from bs4 import BeautifulSoup

from urllib.parse import urljoin

import requests

import csv

url = "http://nj.58.com/pinpaigongyu/pn/{page}/?minprice=1000_1500"

page = 1

print("fetch: ", url.format(page=page))

# 抓取目标页面

response = requests.get(url.format(page=page))

# 创建一个BeautifulSoup对象

html = BeautifulSoup(response.text, "lxml")

# 获取class=list下的所有li元素

house_list = html.select(".list > li")

for house in house_list:

house_title = house.select("h2")[0].string

house_url = urljoin(url, house.select("a")[0]["href"])

house_info_list = house_title.split()

house_location = house_info_list[1]

house_money = house.select(".money")[0].select("b")[0].string

#把str类型的housetitle、house_location、house_money编码成bytes类型

house_title = house_title.encode("utf8")

house_location = house_location.encode("utf8")

house_money = house_money.encode("utf8")

house_url = house_url.encode("utf8")

#查看house_title等的类型

print(type(house_title),type(house_location),type(house_money),type(house_url))

# 向csv文件写入数据

with open('rent.csv','wb') as csv_file:

csv_writer = csv.writer(csv_file,delimiter=',')

csv_writer.writerow([house_title, house_location, house_money, house_url])

#用with的写法就不用写关闭文件的csv_file.close()语句了

先看了大概,问题很多~

#csv_file = open("rent.csv","wb")

# 这句删除,重复了

with open('rent.csv','w') as csv_file:

csv_writer = csv.writer(csv_file,delimiter=',')

for house in house_list: # 在这里写csv

#。。。。。。

csv_writer.writerow([house_title, house_location, house_money, house_url])

更新一点

csv 是文本格式的文件,不支持二进制的写入,所以不要用二进制模式打开文件,数据也不必转成bytes。

再更

根本原因是楼主看错文档,导致了理解有误~

open参数 ‘wb’改成’w’

python2.x要用’wb‘模式写入的真正原因

python2.x中写入CSV时,CSV文件的创建必须加上’b’参数,即csv.writer(open(‘test.csv’,’wb’)),不然会出现隔行的现象。网上搜到的解释是:python正常写入文件的时候,每行的结束默认添加’n’,即0x0D,而writerow命令的结束会再增加一个0x0D0A,因此对于windows系统来说,就是两行,而采用’ b’参数,用二进制进行文件写入,系统默认是不添加0x0D的

而python3.x中换成采用newline=”这一参数来达到这一目的

python将str写入csv_【python3】中str转成bytes类型后用csv.writerow()写入csv文件仍然出错...相关推荐

  1. java中char类型转换成int类型的两种方法

    java中char类型转换成int类型的两种方法 方法一: 第一种利用Integer包装类的方法Integer.parseInt Copychar ch = '9'; if (Character.is ...

  2. python里str什么意思_python中str是什么意思

    在python中str的意思:1.表示字符串类,可以使用引号('或")来创建字符串,例"str='Hello World!'":2.表示str()函数,将对象转化为适于人 ...

  3. python中str是什么_Python中str字符串的功能介绍

    首字母大写,后面的小写 格式:x.capitalize() #开头第一个单词首字母大写,后面的所有字符串全部小写 例如:x = = 'i am A 好 boy' print(x.capitalize( ...

  4. python双除_python2和python3 中的除法的区别

    1. python2中有/和//的除法区别: 其中/的用法: >>>1/2 0 即一个整数(无小数部分的数)被另外一个整数除,计算结果的小数部分被截除了,只留下了整数部分 有时候,这 ...

  5. python3中zip函数_用python实现矩阵转置,python3 中zip()函数

    前几天群里有同学提出了一个问题:手头现在有个列表,列表里面两个元素,比如[1, 2],之后不断的添加新的列表,往原来相应位置添加.例如添加[3, 4]使原列表扩充为[[1, 3], [2, 4]],再 ...

  6. java中char类型转换成int类型的方法

    java中,需要对输入进行一些判断,比如需要输入的是数字,而用户输入了字符,那么就会报错,因此用char或者String类型接收输入的数据就不会报错,但是问题来了:如何让输入的char或者String ...

  7. python中str函数用法_python中str内置函数用法总结

    大家在使用python的过程中,应该在敲代码的时候经常遇到str内置函数,为了防止大家搞混,本文整理归纳了str内置函数.1字符串查找类:find.index:2.字符串判断类:islower.isa ...

  8. python asyncio教程_在Python3中使用asyncio库进行快速数据抓取的教程

    web数据抓取是一个经常在python的讨论中出现的主题.有很多方法可以用来进行web数据抓取,然而其中好像并没有一个最好的办法.有一些如scrapy这样十分成熟的框架,更多的则是像mechanize ...

  9. java string 空间_Java中,String str = “Runoob”;这个语句中str和“Runoob”都占空间吗?分别占多大?...

    题目描述 1,"Runoob"这个字面值是在方法区的常量池中,它占多大空间? 2,str是存在栈区吗?它又占多大空间呢?是占一个 char型大小的空间吗? 3,str是存放的&qu ...

最新文章

  1. 16 导出pcb各网络的布线长度_设计PCB流程
  2. Useful Shell Option – extglob 和 shopt命令
  3. 关于python mysql
  4. 用python画烟花-如何用python画烟花
  5. ITK:手动遍历具有成形邻域的图像区域
  6. oracle undo
  7. Android官方开发文档Training系列课程中文版:高效显示位图之加载大位图
  8. 使用vsphere平台部署xendesktop时注意事项。
  9. excel去重_Python 轻松搞定 Excel 常用的 20 个操作
  10. 关于TortoiseGit汉化包装了,但仍然是英文菜单的问题记录
  11. 虚拟机中CentOS 7 网络服务启动失败
  12. mysql 序列自增长 恢复到1_MySQL查询结果另外自带一列自增序列号
  13. oscache 与 ehcache的对比
  14. 加解密:MD5DesAesRSARSA C#和Java适配
  15. Dreamweaver CS6 行为概述
  16. SyntaxError报错成功解决
  17. body英语什么意思是什么_body是什么意思
  18. 快速准确读取发票信息——发票扫描识别系统
  19. atto软件测试速度,评测平台介绍及HD Tune、ATTO性能测试
  20. js-高德地图规划路线

热门文章

  1. android 图片轮播sli,又一个安卓slider/seekbar – android-slidr
  2. Carla在Windows上的安装与运行
  3. Java求一元二次方程的根
  4. 开关电源的五种纹波噪声如何抑制?
  5. 计算机系统中 使用二进制数的优势,大学计算机基础考试题库(含答案)
  6. 计算机进制与信息编码,信息与二进制编码
  7. MATLAB绘制“问题儿童表情包”动图2
  8. 超详细的网络抓包神器 tcpdump 使用指南
  9. 锂电池电量百分比计算_锂离子电池容量计算之电压法
  10. Vue3搭建微信H5的项目配置【前端】