Python读取和处理csv数据

1、如何读取csv数据?

        实际案例:

             http://quotes.money.163.com/stock/,我们可以通过网站获取了中国股市(深市)数据集,它以csv数据格式存储:

            请将平安银行这只股票,在2022年中成交量超过10000W的记录存储到另一个csv文件中。

    Data,Open,High,Low,CLose,Volume,Adj Close
    2016-06-30,8.69,8.74,8.66,8.70,36220400,8.70
    2016-06-29,8.63,8.69,8.62,8.69,36961100,8.69
    2016-06-28,8.58,8.64,8.56,8.63,33651900,8.63
     ... ...

        解决方案:

                使用标准库中csv模块,可以使用其中reader和writer完成csv文件读写。

2、代码演示

(1)下载csv文件数据

from urllib.request import urlretrieve

# 使用urlretrieve发送http请求,下载平安银行的历史交易数据集
# 第1个参数为url,第2个参数为下载后保存的文件名
urlretrieve('http://quotes.money.163.com/service/chddata.html?code=1000001&'
            'start=19910102&end=20220505', 'pingan.csv' )

(2)实现csv数据的处理,需要注意encoding为‘gb18030’格式

# 使用csv中标准模块进行读写
import csv

# 查找2022年超过1亿成交量的数据
# 使用with语句打开读写的文件
with open('000001.csv', 'r', encoding='gb18030') as rf:
    reader = csv.reader(rf)
    with open('000001_copy.csv', 'w', encoding='utf-8') as wf:
        writer = csv.writer(wf)
        # 首先读取头部信息写入
        headers = next(reader)
        writer.writerow(headers)
        # 对剩余的部分进行判断
        for row in reader:
            # 年份为2022
            if row[0] < '2022-01-01':
                break
            # 成交额大于等于10000W
            if int(float(row[11])) >= 100000000:
                writer.writerow(row)
print('end')

(3)csv模块的reader和writer的简单使用

# 使用csv中标准模块进行读写
import csv

rf = open('000001.csv', 'r', encoding='gb18030')
# rf = open('pingan.csv', 'rb')
# 读取文件信息,这个reader是一个迭代器
reader = csv.reader(rf)
# 迭代器可以使用for语句迭代或next
print(next(reader))
# for row in reader:
#     print(row)


# 写入文件信息
wf = open('000001_copy.csv', 'w', encoding='utf-8')
writer = csv.writer(wf)
# 接收一个列表,写入一行信息,如头部信息
print(writer.writerow(['日期', '股票代码', '名称', '收盘价', '最高价', '最低价', 
                        '开盘价', '前收盘','涨跌额', '涨跌幅', '换手率', '成交量',
                        '成交金额', '总市值', '流通市值']))

# 一边从reader里读一边往writer里写
writer.writerow(next(reader))
# wf.flush()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值