思路
书接上回,所有股票按照申万一级行业获取和存储完,接下来就是整合文件夹,主要用到os和shutil模块。os用于处理文件、目录和路径操作,shutil用于处理文件移动和复制。
原本想按照"电力设备","轻工制造","医药生物","电子","计算机","传媒","机械设备"这七个成长期行业弄一个数据库,最后决定做一个全行业的,做一个七行业的。所有子行业数据存在quant1/申万一级文件夹中。文件位置如下。
代码
import os
import shutil
# 定义quant1文件夹路径和stock文件夹路径
quant1_folder = '申万一级'
stock_folder = 'stock'
# 遍历quant1文件夹下的所有文件夹
for root, dirs, files in os.walk(quant1_folder):
# 遍历当前文件夹中的所有文件
for file in files:
# 判断文件是否为csv文件
if file.endswith('.csv'):
# 构建csv文件的完整路径
csv_path = os.path.join(root, file)
# 将csv文件复制stock文件夹下
shutil.copy(csv_path, stock_folder)
# 输出完成提示
print('所有csv文件已合并到stock文件夹下')
七行业代码
# 定义申万一级文件夹路径和stock2文件夹路径
sw_dir = '申万一级'
target_dir = 'stock2'
# 定义文件夹列表
folders = ["电力设备","轻工制造","医药生物","电子","计算机","传媒","机械设备"]
# 遍历每个文件夹
for folder in folders:
# 构建当前文件夹的完整路径
folder_path = os.path.join(sw_dir, folder)
# 遍历当前文件夹下的所有文件
for file in os.listdir(folder_path):
# 判断文件是否为csv文件
if file.endswith('.csv'):
# 构建当前文件的完整路径
file_path = os.path.join(folder_path, file)
# 复制文件到目标文件夹中
shutil.copy(file_path, target_dir)
print('所有csv文件已合并到stock2文件夹下')
最后一行的处理
打开数据文件检查一下,结果发现所有数据都最后一行多了20200918这行,具体原因我也没找到。因此需要处理一下。路径为stock文件夹,用for语句遍历所有csv文件,读取文件、删除最后一行,存储替换原文件。
代码如下:
import csv
# stock文件夹路径或者文件路径改为:folder_path = 'stock2'
folder_path = 'stock'
# 遍历stock文件夹下的所有csv文件
for filename in os.listdir(folder_path):
if filename.endswith('.csv'):
file_path = os.path.join(folder_path, filename)
# 打开并读取csv文件内容
with open(file_path, 'r') as file:
reader = csv.reader(file)
rows = list(reader)
# 删除最后一行数据
if len(rows) > 0:
rows = rows[:-1]
# 将修改后的内容写回原始csv文件
with open(file_path, 'w', newline='') as file:
writer = csv.writer(file)
writer.writerows(rows)
# 完成删除操作
print('已删除stock文件夹下所有csv文件的最后一行。')
folder_path = 'stock2'可以处理七行业的数据库文件,受上传数据量大小限制,压缩包里只有2000个剩下3109个不显示。
下一篇开始正式进入量化学习。