代码是整理在文件所在目录下的文件,生成一个目录,用处就是在nas或者远程计算机,当文件过多,无法用everything的时候,使用这个代码生成excel,方便查找需要的文件。
以下有两个版本,一个是深度版,一个是浅版本。
此为深版本[Python] 纯文本查看 复制代码
import pandas as pd
import pathlib as ph
import os
'''
@datetime :2022年4月9日
说明:
本程序主要作用是提取文件夹内的子文件夹和子文件夹内的文件,将其写入excel
'''
class ExcelDirectory:
def __init__(self, directory):
self.directory = directory
def get_dirfile(self):
return [(root, files) for root, dirs, files in os.walk(self.directory)]
def df_write(self):
dir_list = self.get_dirfile()
df = pd.DataFrame(dir_list, columns=['根目录', '文件'])
pd.set_option('display.max_columns', None)
df['文件'] = df['文件'].apply(lambda x: 'null' if x == [] else x) # 将【】变为null
cols = [x for i, x in enumerate(df.index) if df.iat[i, 1] == 'null'] # 过滤null
df = df.drop(cols, axis=0) # 删除 null
df.drop(index=0, axis=0, inplace=True) # 删除第一行
df3 = df.explode('文件') # 拆开列表,笛卡尔算法重新排列,将索引和列重新增加匹配
df3.to_excel('test.xlsx', index=False) # 因不需要索引,所以未重置索引直接输出为excel文件
def run(self):
self.df_write()
if __name__ == '__main__':
p = ph.Path(__file__).parent # 本地文件夹
ExcelDirectory(p).run() # 直接运行
此为浅版本
[Python] 纯文本查看 复制代码
import os
import xlwings as xw
class List_Filenames():
def __init__(self,xlsx_filenames):
self.xlsx_path = xlsx_filenames
self.app = xw.App(visible=False, add_book=True) # 程序可见,只打开不新建工作薄
self.app.display_alerts = False # 警告关闭
self.app.screen_updating = False # 屏幕更新关闭
def __add_sheet(self):
self.wb = self.app.books.add()
self.sheet = self.wb.sheets.active
def write_sheet(self):
i = 1
for path in os.listdir(os.path.dirname(__file__)):
if os.path.isdir(os.path.join(os.path.dirname(__file__),path)):
for filename in os.listdir(os.path.join(os.path.dirname(__file__),path)):
self.sheet.range('A%s'%i).options(transpose=True).value = path
self.sheet.range('B%s'%i).options(transpose=True).value = filename
i = i + 1
def __save_work(self):
self.wb.save(self.xlsx_path) # 保存文件
def __close_work(self):
self.wb.close() # 关闭文件
self.app.quit() # 关闭程序
def main(self):
self.__add_sheet()
self.write_sheet()
self.__save_work()
self.__close_work()
if __name__ == '__main__':
xlsx_filenames = 'test22.xlsx'
lst_sheet = List_Filenames(xlsx_filenames)
lst_sheet.main() |