##任务:在(一)的基础上,实现循环提取长时间序列,输出在一个excel/csv中。
##学习历程:
#test1
import os
#path表示路径
path = "E://test//vertical//202204"
filelist = os.listdir(path)
for item in filelist:
print(item)
##打印path路径下的所有文件名
#test2
##glob.glob():该方法返回所有匹配的文件路径列表(list),不包括子文件夹里的文件
import glob
paths = glob.glob(r'C:\Users\83687\Destop\test]*.xlsx')
#获取test文件夹下的所有excel文件路径
data1 = pd.DataFrame(columns=['日期','类型','收入'])#先构建一个空的数据框
for path in paths:#遍历paths目录
data = pd.read_excel(path)
data1 = pd.concat([data1,data])
print(data1)
data1.to_excel(r'C:\Users\83687\Destop\test\test.xlsx')
#concatpd.concat是按照某行或某列来合并,而是按照数据中具体的"某一字段"来连接数据。
#test3 对一个文件夹中的所有Excel文件的数据合并至一个Excel(新建)的过程
import os
import pandas as pd
os.chdir(r'=============')
# 写入文件夹位置,=处填入文件夹位置
Result = pd.DataFrame()
# 建立空DataFrame,存储数据
List_df = []
# 建立空List,用于存储每个Excel中的数据
Check_list = []
# 检验列表,用于检验数据是否完整
for Excel_name in os.listdir():
df = pd.read_excel(Excel_name)
# 若Excel表中存在多个Sheet表,需指定需要合并的Sheet表名
# df = pd.read_excel(Excel_name,sheet_name = +++)
Check_list.append(df.shape[0])
df = df[["#######","#######"]]
# 选择所需要的列,如果是一列,则只需传入一个列名;如果同时选择多列,则传入多个列名即可,多个列名用列表形式封存
# 如果多个excel文件中的列名一致,则不需此项
# #处填入列名
List_df.append(df)
print(sum(check_list))
Merge_data = Result.append(List_df)
print(Merge_data.shape[0])
#保存为新的Excel文件,且所有数据在一个Sheet中
Merge_data.to_excel(r'***************')
#test4:
引自Python3 pandas库(26) 一次读取多个excel文件并合并 - 知乎 https://zhuanlan.zhihu.com/p/31541902
首先是导入pandas库和os库:
第二步是定义文件夹的路径:
第三步是根据文件里表格的列名新建一个空的DataFrame
第四步是利用os库的walk功能遍历文件夹里的所有文件,并读取文件名字。
os.path.join能够将文件夹的路径和文件名字合并成每个文件的完整路径,
然后将每个文件读取,再与空的DataFrame合并
import pandas as pd
import os
inputdir=r'C:\Users\数据\Desktop\新建文件夹'
df_empty=pd.DataFrame(columns=['名称','列1','列2'])
for parents, dirnames, filenames in os.walk(inputdir):
for filename in filenames:
df=pd.read_excel(os.path.join(parents,filename))
df_empty=df_empty.append(df,ignore_index=True)
Python os.walk() 方法 | 菜鸟教程 https://www.runoob.com/python/os-walk.html
import os
for root, dirs, files in os.walk(".", topdown=False):
for name in files:
print(os.path.join(root, name))
for name in dirs:
print(os.path.join(root, name))
实现任务代码如下:
import pandas as pd
import os
inputdir=r'E:\test\vertical\test'
df_empty=pd.DataFrame()
for parents, dirnames, filenames in os.walk(inputdir):
for filename in filenames:
df=pd.read_csv(os.path.join(parents,filename),skiprows=6,header=None,sep=';',names=['a','b','c','d','e'])
df_empty=df_empty.append(df,ignore_index=True)
df1=df_empty.a
df1.to_csv(r'E:/test/vertical/2out.csv',header=False,index=False)