python将str写入csv_【python3】中str转成bytes类型后用csv.writerow()写入csv文件仍然出错...
根本原因是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文件仍然出错...相关推荐
- java中char类型转换成int类型的两种方法
java中char类型转换成int类型的两种方法 方法一: 第一种利用Integer包装类的方法Integer.parseInt Copychar ch = '9'; if (Character.is ...
- python里str什么意思_python中str是什么意思
在python中str的意思:1.表示字符串类,可以使用引号('或")来创建字符串,例"str='Hello World!'":2.表示str()函数,将对象转化为适于人 ...
- python中str是什么_Python中str字符串的功能介绍
首字母大写,后面的小写 格式:x.capitalize() #开头第一个单词首字母大写,后面的所有字符串全部小写 例如:x = = 'i am A 好 boy' print(x.capitalize( ...
- python双除_python2和python3 中的除法的区别
1. python2中有/和//的除法区别: 其中/的用法: >>>1/2 0 即一个整数(无小数部分的数)被另外一个整数除,计算结果的小数部分被截除了,只留下了整数部分 有时候,这 ...
- python3中zip函数_用python实现矩阵转置,python3 中zip()函数
前几天群里有同学提出了一个问题:手头现在有个列表,列表里面两个元素,比如[1, 2],之后不断的添加新的列表,往原来相应位置添加.例如添加[3, 4]使原列表扩充为[[1, 3], [2, 4]],再 ...
- java中char类型转换成int类型的方法
java中,需要对输入进行一些判断,比如需要输入的是数字,而用户输入了字符,那么就会报错,因此用char或者String类型接收输入的数据就不会报错,但是问题来了:如何让输入的char或者String ...
- python中str函数用法_python中str内置函数用法总结
大家在使用python的过程中,应该在敲代码的时候经常遇到str内置函数,为了防止大家搞混,本文整理归纳了str内置函数.1字符串查找类:find.index:2.字符串判断类:islower.isa ...
- python asyncio教程_在Python3中使用asyncio库进行快速数据抓取的教程
web数据抓取是一个经常在python的讨论中出现的主题.有很多方法可以用来进行web数据抓取,然而其中好像并没有一个最好的办法.有一些如scrapy这样十分成熟的框架,更多的则是像mechanize ...
- java string 空间_Java中,String str = “Runoob”;这个语句中str和“Runoob”都占空间吗?分别占多大?...
题目描述 1,"Runoob"这个字面值是在方法区的常量池中,它占多大空间? 2,str是存在栈区吗?它又占多大空间呢?是占一个 char型大小的空间吗? 3,str是存放的&qu ...
最新文章
- 16 导出pcb各网络的布线长度_设计PCB流程
- Useful Shell Option – extglob 和 shopt命令
- 关于python mysql
- 用python画烟花-如何用python画烟花
- ITK:手动遍历具有成形邻域的图像区域
- oracle undo
- Android官方开发文档Training系列课程中文版:高效显示位图之加载大位图
- 使用vsphere平台部署xendesktop时注意事项。
- excel去重_Python 轻松搞定 Excel 常用的 20 个操作
- 关于TortoiseGit汉化包装了,但仍然是英文菜单的问题记录
- 虚拟机中CentOS 7 网络服务启动失败
- mysql 序列自增长 恢复到1_MySQL查询结果另外自带一列自增序列号
- oscache 与 ehcache的对比
- 加解密:MD5DesAesRSARSA C#和Java适配
- Dreamweaver CS6 行为概述
- SyntaxError报错成功解决
- body英语什么意思是什么_body是什么意思
- 快速准确读取发票信息——发票扫描识别系统
- atto软件测试速度,评测平台介绍及HD Tune、ATTO性能测试
- js-高德地图规划路线
热门文章
- android 图片轮播sli,又一个安卓slider/seekbar – android-slidr
- Carla在Windows上的安装与运行
- Java求一元二次方程的根
- 开关电源的五种纹波噪声如何抑制?
- 计算机系统中 使用二进制数的优势,大学计算机基础考试题库(含答案)
- 计算机进制与信息编码,信息与二进制编码
- MATLAB绘制“问题儿童表情包”动图2
- 超详细的网络抓包神器 tcpdump 使用指南
- 锂电池电量百分比计算_锂离子电池容量计算之电压法
- Vue3搭建微信H5的项目配置【前端】