Apr-13-2019, 03:02 PM
(Apr-13-2019, 12:37 AM)Larz60+ Wrote: the following code will search from starting directory to last node.Thanks for your tip, since your code gives me error. The person with lots of files, should put them in folders, that's why i created different code to do that. Then it's more easy for her to search for the any intended file
you can find values for stat here: https://docs.python.org/3/library/stat.html
with this, you can test each entry for file type (directory, regular file, symbolic link, etc,)
and use what you need as they are all presented in the list returned from walk node:
You can insert what you need into your tkinter search algorithm
import os import stat from pathlib import Path class FileWalker: ''' startdir = path relative to current path, example '../data' or use absolute path ''' def __init__(self, startdir): # Anchor starting directory os.chdir(os.path.abspath(os.path.dirname(__file__))) fileinfo = self.walk_node(startdir) # print first 10 entries. for n, entry in enumerate(fileinfo): if n > 10: break print(f'\nabspath: {entry[0]}') print(f'stats: {entry[1]}') if stat.S_ISDIR(entry[1][0]): print(f'{entry[0].name} is a directory') elif stat.S_ISREG(entry[1][0]): print(f'{entry[0].name} is a regular file') # You can check for all possibilities. def find_file(self, filename): print(f'Searching for {filename}') for entry in self.fileinfo: if filename == entry[0].name: print(f'file found in {entry[0].resolve()}') def walk_node(self, node, display=False): p = Path(node) fileinfo = [] for file in p.glob('**/*'): fileinfo.append([file.resolve(), file.stat()]) return fileinfo if __name__ == '__main__': fw = FileWalker('/home/larz60/Documents/TestFileWalker/data') print('\n\n') fw.find_file('Delaware.html')sample run from above (first 10 itens in array)
when done playing with this code, remove all print statements, and the call to run (in __init__)
Output:abspath: /home/larz60/Documents/TestFileWalker/data/control stats: os.stat_result(st_mode=16895, st_ino=71960773, st_dev=2049, st_nlink=2, st_uid=1000, st_gid=1000, st_size=4096, st_atime=1555110604, st_mtime=1550099077, st_ctime=1555110549) control is a directory abspath: /home/larz60/Documents/TestFileWalker/data/www2.census.gov.old stats: os.stat_result(st_mode=16895, st_ino=71960776, st_dev=2049, st_nlink=3, st_uid=1000, st_gid=1000, st_size=4096, st_atime=1555110604, st_mtime=1551005107, st_ctime=1555110556) www2.census.gov.old is a directory abspath: /home/larz60/Documents/TestFileWalker/data/html_old stats: os.stat_result(st_mode=16895, st_ino=71960656, st_dev=2049, st_nlink=2, st_uid=1000, st_gid=1000, st_size=4096, st_atime=1555110549, st_mtime=1550613985, st_ctime=1555110549) html_old is a directory abspath: /home/larz60/Documents/TestFileWalker/data/json stats: os.stat_result(st_mode=16895, st_ino=71960655, st_dev=2049, st_nlink=2, st_uid=1000, st_gid=1000, st_size=4096, st_atime=1555110604, st_mtime=1549856578, st_ctime=1555110548) json is a directory abspath: /home/larz60/Documents/TestFileWalker/data/tmp stats: os.stat_result(st_mode=16895, st_ino=69209097, st_dev=2049, st_nlink=3, st_uid=1000, st_gid=1000, st_size=4096, st_atime=1555110541, st_mtime=1551742394, st_ctime=1555110541) tmp is a directory abspath: /home/larz60/Documents/TestFileWalker/data/tmp_old stats: os.stat_result(st_mode=16895, st_ino=71960713, st_dev=2049, st_nlink=2, st_uid=1000, st_gid=1000, st_size=4096, st_atime=1555110604, st_mtime=1550613985, st_ctime=1555110549) tmp_old is a directory abspath: /home/larz60/Documents/TestFileWalker/data/docs stats: os.stat_result(st_mode=16895, st_ino=71959774, st_dev=2049, st_nlink=6, st_uid=1000, st_gid=1000, st_size=4096, st_atime=1555110604, st_mtime=1551614378, st_ctime=1555110548) docs is a directory abspath: /home/larz60/Documents/TestFileWalker/data/0README_PL.doc stats: os.stat_result(st_mode=33279, st_ino=69209092, st_dev=2049, st_nlink=1, st_uid=1000, st_gid=1000, st_size=98816, st_atime=1555110540, st_mtime=1551005110, st_ctime=1555110540) 0README_PL.doc is a regular file abspath: /home/larz60/Documents/TestFileWalker/data/www2.census.gov stats: os.stat_result(st_mode=16895, st_ino=69209211, st_dev=2049, st_nlink=95, st_uid=1000, st_gid=1000, st_size=4096, st_atime=1555110542, st_mtime=1551563760, st_ctime=1555110542) www2.census.gov is a directory abspath: /home/larz60/Documents/TestFileWalker/data/html stats: os.stat_result(st_mode=16895, st_ino=69209093, st_dev=2049, st_nlink=2, st_uid=1000, st_gid=1000, st_size=4096, st_atime=1555110604, st_mtime=1551742394, st_ctime=1555110540) html is a directory abspath: /home/larz60/Documents/TestFileWalker/data/ftp stats: os.stat_result(st_mode=16895, st_ino=71959772, st_dev=2049, st_nlink=2, st_uid=1000, st_gid=1000, st_size=4096, st_atime=1555110604, st_mtime=1551573910, st_ctime=1555110542) ftp is a directory Searching for Delaware.html file found in /home/larz60/Documents/TestFileWalker/data/html_old/Delaware.html file found in /home/larz60/Documents/TestFileWalker/data/tmp_old/Delaware.html
fileinfo = self.walk_node(startdir)
and then import the class into your program and use what you want.
** Edited 8:33 PM EDT **
added find_file routine and test for same