【大麦小米学量化】将list写入csv并读取还原为list(自选股操作)


前言

有时候我们需要将list写入本地文件,作为交换信息由其它程序进行读取。就比如,做量化交易的时候,一个程序进行选股,一个程序读取选股信息后进行交易。当然也可以写入redis等,方法很多。但写入本地csv文件最简单,毕竟自选股的结果就是一个list就够了。

下面进入正文。

一、将list写入csv并读取还原为list(含源代码)

在网上找了好些个方法,最终修改为如下代码,这里做个分享,方便后来人。
这里踩的坑主要有:
1、list可以写入csv,但是每一个元素的字符都被逗号分割后存储,还原出来很麻烦;
2、list的每个元素写入csv后,都会有一个空行,在还原的时候多出来一个空的元素;

经过修改和完善,目前已经可以完全实现list写入csv并原样还原。为方便调用,将其包装为两个函数。具体代码如下:

import csv

def list2csv(data,filename='output.csv'):
    # 打开或创建CSV文件并指定写入模式, newline=''则不生成空行
    with open(filename, mode='w', newline='') as file:
        # 初始化CSV writer对象
        writer = csv.writer(file)
        # 遍历数据列表,逐行写入到CSV文件中
        for item in data:
            writer.writerows([item])
    print("已成功将列表写入CSV文件!")

def csv2list(filename):
    ret_list = []
    # 打开CSV文件进行读取操作
    with open(filename) as f:
        f_reader = csv.reader(f)
        #循环文件中的每一行
        for row in f_reader:
            # print(row)
            ret_list.append(''.join(row)) 
        print("成功从CSV文件中读取数据并转换为列表形式。")
    return ret_list

if __name__ == "__main__": 
    data = ['300750','300150','600450','601068.SH']
    list2csv(data)
    ret = csv2list(filename='output.csv')
    print(ret)
已成功将列表写入CSV文件!
成功从CSV文件中读取数据并转换为列表形式。
['300750', '300150', '600450', '601068.SH']
请按任意键继续. . .

二、进阶应用(自选股信息交换)

比如我们通过pywencai完成选股(【大麦小米学量化】通过pywencai访问同花顺问财接口实现智能选股),并将股票代码写入一个固定路径和文件名的csv文件,后边再进行读取还原。具体代码如下:

if __name__ == "__main__": 

    import pywencai
    query_str = '非停盘;非ST;连涨3天涨幅1%-4%;均线多头排列;无长上影线'# 根据需要自行修改,此处仅做演示,不做交易参考。
    df = pywencai.get(query=query_str, sort_key='股票代码', sort_order='asc', perpage=10 )
    print(df)
    code_list = df['股票代码'].values.tolist()
    print(code_list)
    
    list2csv(code_list,filename='mystock.csv')
    mystock = csv2list(filename='mystock.csv')
    print(mystock)

运行结果如下:可以看到还原成list与原始信息一模一样。

        股票代码  股票简称    最新价 交易状态[20231215]  ... 最低价:前复权[20231215] 收盘价:前复权[20231213] market_code    code
0  000782.SZ  美达股份   5.83             交易  ...              5.74              5.65          33  000782
1  831304.BJ  迪尔化工   7.19             交易  ...              6.74              6.46         151  831304
2  831834.BJ  三维股份   7.43             交易  ...              7.09              7.08         151  831834
3  832225.BJ  利通科技  17.62             交易  ...             17.10             17.27         151  832225
4  832419.BJ  路斯股份  10.97             交易  ...             10.64             10.36         151  832419
5  832522.BJ  纳科诺尔  20.96             交易  ...             20.24             20.33         151  832522
6  833580.BJ  科创新材   7.43             交易  ...              7.20              7.05         151  833580
7  834415.BJ  恒拓开源   6.38             交易  ...              6.13              6.14         151  834415
8  834639.BJ  晨光电缆   5.36             交易  ...              5.13              5.09         151  834639
9  836260.BJ  中寰股份   8.41             交易  ...              8.12              8.07         151  836260

[10 rows x 23 columns]
['000782.SZ', '831304.BJ', '831834.BJ', '832225.BJ', '832419.BJ', '832522.BJ', '833580.BJ', '834415.BJ', '834639.BJ', '836260.BJ']
已成功将列表写入CSV文件!
成功从CSV文件中读取数据并转换为列表形式。
['000782.SZ', '831304.BJ', '831834.BJ', '832225.BJ', '832419.BJ', '832522.BJ', '833580.BJ', '834415.BJ', '834639.BJ', '836260.BJ']
请按任意键继续. . .


总结

为了快速实现信息交换,博主尝试了很多方法,这个方法既简单,需要的代码也最少。极容易上手也不容易出错。

如果有人说我要保存成dict,可以移步到博主TOML的文章。
【TOML配置文件】配置文件我用TOML!人性化,少出错!

猜你喜欢

转载自blog.csdn.net/popboy29/article/details/135024416