前言
有时候我们需要将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!人性化,少出错!