# =========================================================
# Select a file from a list of files found in a directory
# ---------------------------------------------------------
# The list contains only normal files that have a
# specified file type
# ---------------------------------------------------------
# potential improvements
# 1. Instead of a single file type use to select files,
# use a list of serveral file types
# 2. instead of a single search directory, use a list of
# several directories
# 3. add try...except for errors
# =========================================================
import sys
import os
import platform
# ---------------------------------------------------------
# global variables
#
# dir directory to search for files
# files list of files to select from
# ftyp selection file type
# verboase display 'remove file' messages
# ---------------------------------------------------------
dir = '.'
files = []
ftyp = 'txt'
verbose = True
# ---------------------------------------------------------
# am I running Python 3?
# ---------------------------------------------------------
def RunningPython3():
##print(sys.version_info)
if sys.version_info[0] == 3:
return True
return False
# ---------------------------------------------------------
# get user input (Python 2 or 3)
# ---------------------------------------------------------
def GetUserInput(prompt,py3):
if py3:
i = input(prompt)
else:
i = raw_input(prompt)
return i.strip()
# ---------------------------------------------------------
# pause program
# ---------------------------------------------------------
def Pause(py3):
print('')
GetUserInput('Press enter to continue ',py3)
# ---------------------------------------------------------
# clear the screen
# ---------------------------------------------------------
def ClearScreen():
if platform.system() == 'Linux':
os.system('clear')
elif platform.system() == 'Windows':
os.system('clear')
else:
os.system('cls')
# ---------------------------------------------------------
# Get a list of files (not directories) of a given type
# ---------------------------------------------------------
def GetListOfFiles(dir,typ):
global files, verbose
# --- get a list of entries in the directory ----------
files = os.listdir(dir)
# --- remove all non-regular entries from the list ----
# --- also remove all entries that do not match ----
# --- the file type ----
i = 0 # list index
while i < len(files):
if not os.path.isfile(files[i]):
##if verbose:
## print('Removing {} from the file list'
## .format(files[i]))
del files[i]
continue
if os.path.islink(files[i]):
##if verbose:
## print('Removing {} from the file list'
## .format(files[i]))
del files[i]
continue
if not files[i].endswith(typ):
##if verbose:
## print('Removing {} from the file list'
## .format(files[i]))
del files[i]
continue
i += 1
files.sort()
return True
# ---------------------------------------------------------
# ask the user to select a file
# ---------------------------------------------------------
def AskUserToSelectFile(py3):
global files
l = len(files)
while True:
# --- display file list menu ----------------------
ClearScreen()
print('==============================')
print('Select a File')
print('==============================')
print(' ## File')
print(' -- -------------------------')
i = 0
while i < l:
print(' {} {}'.format(i,files[i]))
i += 1
# --- ask the user to select a file ---------------
print('')
sel = GetUserInput(
' Enter selection index: ',py3)
# --- valid selection? ----------------------------
if sel == '': # no selection?
return('')
if sel.isdigit() != True:
print('')
print('Illegal selection entered ({})'
.format(sel))
Pause(py3)
continue
idx = int(sel)
if idx < 0 or idx >= l:
print('')
print('Selection out of range ({})'
.format(idx))
Pause(py3)
continue
break
# --- return selected file ----------------------------
return files[idx]
# ---------------------------------------------------------
# main
# ---------------------------------------------------------
if __name__ == '__main__':
py3 = RunningPython3()
if GetListOfFiles(dir,ftyp):
# --- any entries in the file list? --------------
if len(files) < 1:
print('No files in the list')
print('')
sys.exit()
##else:
## print('---------- File list ----------')
## for x in files:
## print(x)
## Pause(py3)
else: # get file list failed
print('')
sys.exit()
# --- ask the uer to select a file from the list -----
f = AskUserToSelectFile(py3)
if f == '':
print('')
print('User did not selected a file')
else:
print('')
print('User selected file {}'.format(f))
print('')