读取目录及所有excel文件,包括目录名文件名,文件名尾数分奇偶两种类型
参考GPT和自己的思路:
可以使用pandas的相关函数来读取文件夹及所有excel文件。下面是一段示例代码:
import os
import pandas as pd
# 要读取的目录路径
dir_path = './data/'
# 定义一个空的DataFrame来存储所有数据
df_all = pd.DataFrame()
# 遍历目录下的所有文件
for root, dirs, files in os.walk(dir_path):
for file in files:
# 判断是否为Excel文件
if file.endswith('.xlsx'):
# 构造文件路径
file_path = os.path.join(root, file)
# 读取Excel文件中的数据
df = pd.read_excel(file_path)
# 给数据添加三列信息:所在目录名、文件名、文件名尾数的奇偶性
df['directory'] = os.path.basename(root)
df['file_name'] = file
df['end_num'] = int(file.split('.')[0][-1])
df['is_odd'] = df['end_num'] % 2
# 将当前Excel文件中的数据添加到总数据中
df_all = df_all.append(df)
# 打印出总数据
print(df_all.head())
这段代码首先定义了要读取的目录路径,然后使用os模块遍历该目录下的所有文件。当遇到Excel文件时,使用pandas的read_excel函数将其读入DataFrame中。接着,代码给DataFrame添加了三列信息,分别是文件所在目录名、文件名、以及文件名尾数的奇偶性。最后,将当前Excel文件中的数据添加到总数据DataFrame中。
该回答引用GPTᴼᴾᴱᴺᴬᴵ
你可以使用pandas库中的函数来实现读取目录及所有excel文件的功能。以下是一个示例代码,其中使用了os库中的函数来获取指定目录下的所有文件名,并在pandas中使用了read_excel函数来读取所有的excel文件:
import os
import pandas as pd
def read_excel_files(path):
all_files = os.listdir(path)
df_list = []
for file_name in all_files:
full_path = os.path.join(path, file_name)
if os.path.isdir(full_path):
continue
if not file_name.endswith('.xlsx'):
continue
if int(file_name.split('.')[-2]) % 2 == 0:
sheet_name = 'even'
else:
sheet_name = 'odd'
df = pd.read_excel(full_path, sheet_name=sheet_name)
df['filename'] = file_name
df['dirname'] = os.path.dirname(full_path)
df_list.append(df)
return pd.concat(df_list, ignore_index=True)
df = read_excel_files('/path/to/folder')
在上面的代码中,path为目录的路径,os.listdir()函数用于获取目录下的所有文件名,os.path.join()函数用于拼接目录路径和文件名,os.path.isdir()函数用于判断文件是否是目录,str.endswith()函数用于判断文件名是否以.xlsx结尾,int()函数用于将字符串类型的文件名尾数转换为整数类型进行判断,pd.read_excel()函数用于读取excel文件,pd.concat()函数用于将所有的DataFrame合并为一个DataFrame。
这里为了方便,将不是excel文件和偶数尾数的excel文件过滤掉了。如果需要读取其他类型的文件,可以在if not file_name.endswith('.xlsx'):这行代码中修改文件类型即可。如果需要使用其他的sheet名,可以修改sheet_name变量的值。如果需要在DataFrame中加入目录名和文件名,可以使用os.path.dirname()函数和df['filename'] = file_name语句实现。
(1)用os.listdir()读取指定目录file_dir下的文件列表。
(2)对文件列表下的每个文件single_file,依次用os.path.join(file_dir,single_file)获取文件名,作为pd.read_excel()的参数,依次进行处理。
目录下的文件应该全部为Excel文件(xls或xlsx格式),否则会报错。
例如,在当前目录内有一个目录temp,里面有若干个xls文件,现需要依次读取里面的所有文件,并分别原样写入文件'1.xls'、'2.xls'、……。代码如下:
# -*- coding: utf-8 -*-
import os
import pandas as pd
file_dir="temp" #目录
all_file_list=os.listdir(file_dir)
i = 1
for single_file in all_file_list:
single_data_frame=pd.read_excel(os.path.join(file_dir,single_file)) # 逐个读取
single_data_frame.to_excel(str(i)+'.xls',index=False) #写入
i+=1