#python #database #tkinter #directory
#питон #База данных #tkinter #каталог
Вопрос:
В настоящее время я пытаюсь каталогизировать большую базу данных файлов с сервера. Приведенный ниже код очень хорошо работает в небольших каталогах с объемом данных около 150 ГБ и файлами 4k. Однако, когда я пытаюсь применить его к большому каталогу с 300 ГБ и 15-20 тыс. файлов, он перестает реагировать.
Что я могу сделать, чтобы помочь ему завершить процесс гладко? Любая помощь была бы потрясающей!
import os import pandas as pd import tkinter.filedialog as tkfd import os.path,time import time import easygui import pathlib import openpyxl import xlsxwriter d_ext_desc = {'csv': 'CSV file', 'cnav3050':'CNAV', 'db': 'Database', 'doc': 'Microsoft Word Document', 'docx': 'Microsoft Word Document', 'GIF': 'GIF Image file', 'html': 'HTML file', 'ico': 'Icon Image file', 'jpg': 'JPG Image file', 'JPEG': 'JPEG Image file', 'json': 'JSON file', 'kml': ' Keyhole Markup Language', 'log': 'Log Data file', 'lnk': 'Shortcut file', 'msg': 'Microsoft Outlook Message file', 'pdf': 'PDF file', 'pkl': 'Pickle (python) file', 'png': 'PNG Image file', 'ppt': 'Microsoft Powerpoint file', 'pptx': 'Microsoft Powerpoint file', 'pst': 'Microsoft Outlook Data file', 'py': 'Python file', 'pyc': 'Python file (compiled)', 'qpd': 'Qinsy Point Cloud', 'rtf': 'Rich Text Format', 'svg': 'SVG Image file', 'txt': 'Text document', 'tif': 'Tag Image File', 'url': 'Hyperlink', 'vsd': 'Microsoft Visio file', 'xls': 'Microsoft Excel file', 'xlsb': 'Microsoft Excel file', 'xlsm': 'Microsoft Excel (Macro-enabled) file', 'xlsx': 'Microsoft Excel file', 'xml': "Extensible Markup Language", 'yml': 'Requirements file (python)', 'zip': 'ZIP file'} def ext_desc(ext): try: desc = d_ext_desc[ext] except KeyError: desc = '' else: pass return desc path = None path = path if path else tkfd.askdirectory() def generate_index(max=0): df = pd.DataFrame(columns=['File', 'File Type', 'Folder Location', 'Link', 'Path', 'File Size(MB)','Created', 'Modified', 'Accessed']) for root, _, files in os.walk(path): files = [f for f in files if not f.startswith('~') and f != 'Thumbs.db'] paths = [os.path.join(root, f) for f in files] exts = [os.path.splitext(f)[1][1:].lower() for f in files] filetypes = [ext_desc(ext) for ext in exts] file_links = ['=HYPERLINK("{}","link")'.format(p) if len(p) lt; 256 else '' for p in paths] folders = [os.path.dirname(p) for p in paths] file_size = [os.stat(p).st_size / (1024*1024) for p in paths] created = [time.ctime(os.path.getctime(p)) for p in paths] modified = [time.ctime(os.path.getmtime(p)) for p in paths] accessed = [time.ctime(os.path.getatime(p)) for p in paths] df1 = pd.DataFrame({'File': files, 'File Type': filetypes, 'Folder Location': folders, 'Link': file_links, 'Path': paths, 'File Size(MB)': file_size, 'Created': created, 'Modified': modified, 'Accessed': accessed }) df = df.append(df1) if max and (df.shape[0] gt; max): break df = df.reset_index(drop=True) return df if __name__ == '__main__': timer = time.strftime('%Y-%m-%d') name = f'Database sorted {timer}.xlsx' df = generate_index(max=0) df.to_excel(name)
Комментарии:
1. Я тестировал и напрямую подключал путь, он отлично работает, просто не работает с Tkinter..