合并多个excel文件到一个excel文件,多个excel文件表头一致,命名类似,比如“华东地区销售数据_1.xlsx,华东地区销售数据_2.xlsx,,,”
pandas和os
- os.path.join()用于路径拼接,如os.path.join(path,filename)=‘C:/Users/lenovo/Desktop/sales/华东地区销售数据_1.xlsx’
- pd.read_excel(filename)读取Excel文件,返回一个DataFrame对象
- 列表名.append将DataFrame写入列表
- pd.concat合并Pandas数据,concat参数axis=0(默认)为上下拼接(纵向),axis=1为左右拼接(横向)
一组数据
只需要合并华东地区销售数据或者只有华东地区销售数据这一组数据
import os
import pandas as pd
data_list = []
path='C:/Users/lenovo/Desktop/sales'
for filename in os.listdir(path):
#筛选文件名称以name开头以.xlsx结尾
if filename.startswith("华东地区销售数据") and filename.endswith(".xlsx"):
#os.path.join()用于路径拼接,如os.path.join(path,filename)='C:/Users/lenovo/Desktop/sales/华东地区销售数据_1.xlsx'
# pd.read_excel(filename)读取Excel文件,返回一个DataFrame对象
# 列表名.append将DataFrame写入列表
data_list.append(pd.read_excel(os.path.join(path,filename)))
# concat合并Pandas数据,concat参数axis=0(默认)为上下拼接(纵向),axis=1为左右拼接(横向)
data_all = pd.concat(data_list)
# 将 DataFrame 保存为 excel 文件
data_all.to_excel("华东地区销售数据"+".xlsx", index=False)
多组数据
比如需要分别合并华东地区销售数据和西北地区销售数据,即将华东地区销售数据的多个文件合并为命名为华东地区销售数据.xlsx,将西北地区销售数据的多个文件合并为命名为西北地区销售数据.xlsx
import os
import pandas as pd
name_list = ["华东地区销售数据","西北地区销售数据"] #需要合并的数据组
data_list = []
path='C:/Users/lenovo/Desktop/sales'
for name in name_list:#遍历数据组名称列表
for filename in os.listdir(path):
#筛选文件名称以name开头以.xlsx结尾
if filename.startswith(name) and filename.endswith(".xlsx"):
#os.path.join()用于路径拼接,如os.path.join(path,filename)='C:/Users/lenovo/Desktop/sales/华东地区销售数据_1.xlsx'
# pd.read_excel(filename)读取Excel文件,返回一个DataFrame对象
# 列表名.append将DataFrame写入列表
data_list.append(pd.read_excel(os.path.join(path,filename)))
# concat合并Pandas数据,concat参数axis=0(默认)为上下拼接(纵向),axis=1为左右拼接(横向)
data_all = pd.concat(data_list)
# 将 DataFrame 保存为 excel 文件
data_all.to_excel(name+".xlsx", index=False)
print(name+"!")
glob和pandas
glob用来匹配路径文件名
glob通配符
* | 匹配0个或者任意多个字符 |
---|---|
** | 匹配所有文件,目录,子目录和子目录里面的文件 |
? | 匹配一个字符 |
[] | 匹配指定范围内的字符,如[1-9]匹配1至9内的字符 |
[!] | 匹配不在指定范文内的字符 |
glob.glob
返回列表
#匹配'./test_dir/*路径下的所有目录和文件,并返回路径列表
path_list = glob.glob('./test_dir/*')
#匹配./test_dir/路径下含有的所有.txt文件
path_list1 = glob.glob('./test_dir/*.txt')
#遍历在当前路径下包含所有子目录的所有的.py文件:
glob.glob('**/*.py', recursive=True)
['walktree.py', 'udpserver.py', 'udpclient.py', 'auto_mysql_dump.py', 'acme-tiny/acme_tiny.py', 'acme-tiny/setup.py', 'acme-tiny/tests/server.py', 'acme-tiny/tests/__init__.py', 'acme-tiny/tests/monkey.py', 'acme-tiny/tests/test_install.py', 'acme-tiny/tests/test_module.py']
glob.iglob
glob函数一次性的返回了所有的结果,而iglob函数是一个一个的返回结果。
for fname in glob.iglob("./tmp/*.py"):
print(fname)
一组数据
import pandas as pd
import glob
data_list = []
for filename in glob.glob('C:/Users/lenovo/Desktop/jd/华东地区销售数据*.xlsx'):
data_list.append(pd.read_excel(files[0]))
data_all = pd.concat(data_list)
# 将 DataFrame 保存为 excel 文件
data_all.to_excel("华东地区销售数据.xlsx", index=False)
多组数据
import pandas as pd
import glob
name_list = ["华东地区销售数据","西北地区销售数据"]
data_list = []
path='C:/Users/lenovo/Desktop/sales/'
for name in name_list:
for filename in glob.glob(path+name+'*.xlsx'):
data_list.append(pd.read_excel(filename))
data_all = pd.concat(data_list)
# 将 DataFrame 保存为 excel 文件
data_all.to_excel(name+".xlsx", index=False)