Python CSV文件读取写入总结
Posted 在奋斗的大道
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python CSV文件读取写入总结相关的知识,希望对你有一定的参考价值。
前提:Python导入csv 模块
import csv
创建:
利用csv包中的writer函数,如果文件不存在,会自动创建,需要注意的是,文件后缀一定要是.csv,这样才会创建csv文件
eg:
# 创建文件
f = open('长沙二手房数据.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['标题', '小区', '地名', '房子基本信息',
'房价', '单价', '发布信息'])
# 写入表头
csv_writer.writeheader()
'''
'''
csv_writer.writerow(dit)
# dit 为写入数据,数据类型为:字典
读:
利用csv.reader可以读csv文件,然后返回一个可迭代的对象csv_read,我们可以直接从csv_read中取数据
eg:
with open('长沙二手房数据.csv', 'rt', newline='', encoding='utf-8', errors='ignore') as f:
csv_read = csv.reader(f)
for line in csv_read:
print(type(line))
print(line)
实战:爬虫爬取链家(长沙)二手房数据,并写入csv 文件中
import csv
import parsel
import requests
def downloadLianjia(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (Khtml, like Gecko) '
'Chrome/81.0.4044.138 '
'Safari/537.36 '
}
response = requests.get(url=url, headers=headers)
print(response.text)
selector = parsel.Selector(response.text)
lis = selector.css('.sellListContent li')
for li in lis:
# 标题
title = li.css('.title a::text').get()
# 地址
positionInfo = li.css('.positionInfo a::text').getall()
community = ''
address = ''
if len(positionInfo):
# 小区
community = positionInfo[0]
# 地名
address = positionInfo[1]
# 房子基本信息
houseInfo = li.css('.houseInfo::text').get()
# 房价
print('数据类型:', type(li.css('.totalPrice span::text').get()))
txt = li.css('.totalPrice span::text').get()
Price = ''
if isinstance(txt, str):
Price = li.css('.totalPrice span::text').get() + '万'
# 单价
print('单价数据类型:', type(li.css('.unitPrice span::text').get()))
txt = li.css('.unitPrice span::text').get()
unitPrice = ''
if isinstance(txt, str):
unitPrice = li.css('.unitPrice span::text').get().replace('单价', '')
# 发布信息
followInfo = li.css('.followInfo::text').get()
dit = {
'标题': title,
'小区': community,
'地名': address,
'房子基本信息': houseInfo,
'房价': Price,
'单价': unitPrice,
'发布信息': followInfo,
}
print(dit)
# 创建文件
f = open('长沙二手房数据.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['标题', '小区', '地名', '房子基本信息',
'房价', '单价', '发布信息'])
# 写入表头
csv_writer.writeheader()
'''
'''
csv_writer.writerow(dit)
for page in range(1, 101):
url = 'https://cs.lianjia.com/ershoufang/'
downloadLianjia(url)
实战:读取爬虫爬取链家(长沙)二手房数据,并进行数据清洗
import csv
def str2value(valueStr):
valueStr = str(valueStr)
idxOfYi = valueStr.find('亿')
idxOfWan = valueStr.find('万')
if idxOfYi != -1 and idxOfWan != -1:
return int(float(valueStr[:idxOfYi])*1e8 + float(valueStr[idxOfYi+1:idxOfWan])*1e4)
elif idxOfYi != -1 and idxOfWan == -1:
return int(float(valueStr[:idxOfYi])*1e8)
elif idxOfYi == -1 and idxOfWan != -1:
return int(float(valueStr[idxOfYi+1:idxOfWan])*1e4)
elif idxOfYi == -1 and idxOfWan == -1:
return float(valueStr)
# 创建文件
f = open('长沙二手房数据清洗.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['标题', '小区', '地名', '房子基本信息',
'房价', '单价', '发布信息'])
# 写入表头
csv_writer.writeheader()
with open('长沙二手房数据.csv', 'rt', newline='', encoding='utf-8', errors='ignore') as f:
csv_read = csv.reader(f)
for line in csv_read:
if len(line):
txt = line[0]
if txt != '标题' and txt != '':
print('总价', line[4])
unitPrice = 0
Price = 0
if line[4].find('万') > 0:
Price = str2value(line[4])
print('是否包含万', str2value(line[4]))
if line[5].find('元/平') > 0:
unitPrice = int(str(line[5].replace('元/平', '').replace(',', '')))
print('是否包含元/平', int(str(line[5].replace('元/平', '').replace(',', ''))))
print('单价', line[5])
print(line)
dit = {
'标题': line[0],
'小区': line[1],
'地名': line[2],
'房子基本信息': line[3],
'房价': Price,
'单价': unitPrice,
'发布信息': line[6],
}
csv_writer.writerow(line)
附加:
python利用open打开文件的方式:
w:以写方式打开,
a:以追加模式打开 (从 EOF 开始, 必要时创建新文件)
r+:以读写模式打开
w+:以读写模式打开 (参见 w )
a+:以读写模式打开 (参见 a )
rb:以二进制读模式打开
wb:以二进制写模式打开 (参见 w )
ab:以二进制追加模式打开 (参见 a )
rb+:以二进制读写模式打开 (参见 r+ )
wb+:以二进制读写模式打开 (参见 w+ )
ab+:以二进制读写模式打开 (参见 a+ )
以上是关于Python CSV文件读取写入总结的主要内容,如果未能解决你的问题,请参考以下文章