Instructions Add a command to this chapter’s case study program that allows the user to view the contents of a file in the current working directory. When the command is selected, the program should display a list of filenames and a prompt for the name of the file to be viewed. Be sure to include error recovery in the program. If the user enters a filename that does not exist they should be prompted to enter a filename that does exist. An example of the program input and output is shown below: /root/sandbox 1 List the current directory 2 Move up 3 Move down 4 Number of files in the directory 5 Size of the directory in bytes 6 Search for a file name 7 View the contents of a file 8 Quit the program Enter a number: 7 Files in /root/sandbox: filesys.py example.txt Enter a file name from these names: example.txt THIS IS CONTENT OF AN EXAMPLE FILE. /root/sandbox 1 List the current directory 2 Move up 3 Move down 4 Number of files in the directory 5 Size of the directory in bytes 6 Search for a file name 7 View the contents of a file 8 Quit the program Enter a number: 8 Have a nice day!   """ File: filesys.py Project 6.6 Provides a menu-driven tool for navigating a file system and gathering information on files. Adds a command to view a file's contents. """ import os, os.path QUIT = '8' COMMANDS = ('1', '2', '3', '4', '5', '6', '8') MENU = """1   List the current directory 2   Move up 3   Move down 4   Number of files in the directory 5   Size of the directory in bytes 6   Search for a file name 8   Quit the program""" def main():     while True:         print(os.getcwd())         print(MENU)         command = acceptCommand()         runCommand(command)         if command == QUIT:             print("Have a nice day!")             break def acceptCommand():     """Inputs and returns a legitimate command number."""     while True:         command = input("Enter a number: ")         if not command in COMMANDS:             print("Error: command not recognized")         else:             return command def runCommand(command):     """Selects and runs a command."""     if command == '1':         listCurrentDir(os.getcwd())     elif command == '2':         moveUp()     elif command == '3':         moveDown(os.getcwd())     elif command == '4':         print("The total number of files is", \               countFiles(os.getcwd()))     elif command == '5':         print("The total number of bytes is", \               countBytes(os.getcwd()))     elif command == '6':         target = input("Enter the search string: ")         fileList = findFiles(target, os.getcwd())         if not fileList:             print("String not found")         else:             for f in fileList:                 print(f)      # add your condition here     elif command == '8':            print("Files in", os.getcwd())            print(listCurrentDir(os.getcwd()))     viewFile = input("Enter a file name from these names: ")     viewFile() def viewFile(dirName):    # write your code here    f = open("viewFile", "r")    print(f.read)     print("") def listCurrentDir(dirName):     """Prints a list of the cwd's contents."""     lyst = os.listdir(dirName)     for element in lyst: print(element) def moveUp():     """Moves up to the parent directory."""     os.chdir("..") def moveDown(currentDir):     """Moves down to the named subdirectory if it exists."""     newDir = input("Enter the directory name: ")     if os.path.exists(currentDir + os.sep + newDir) and \        os.path.isdir(newDir):         os.chdir(newDir)     else:         print("ERROR: no such name") def countFiles(path):     """Returns the number of files in the cwd and     all its subdirectories."""     count = 0     lyst = os.listdir(path)     for element in lyst:         if os.path.isfile(element):             count += 1         else:             os.chdir(element)             count += countFiles(os.getcwd())             os.chdir("..")     return count def countBytes(path):     """Returns the number of bytes in the cwd and     all its subdirectories."""     count = 0     lyst = os.listdir(path)     for element in lyst:         if os.path.isfile(element):             count += os.path.getsize(element)         else:             os.chdir(element)             count += countBytes(os.getcwd())             os.chdir("..")     return count def findFiles(target, path):     """Returns a list of the file names that contain     the target string in the cwd and all its subdirectories."""     files = []     lyst = os.listdir(path)     for element in lyst:         if os.path.isfile(element):             if target in element:                 files.append(path + os.sep + element)         else:             os.chdir(element)             files.extend(findFiles(target, os.getcwd()))             os.chdir("..")     return files if __name__ == "__main__":     main()

Programming Logic & Design Comprehensive
9th Edition
ISBN:9781337669405
Author:FARRELL
Publisher:FARRELL
Chapter7: File Handling And Applications
Section: Chapter Questions
Problem 7RQ
icon
Related questions
Question

Instructions

Add a command to this chapter’s case study program that allows the user to view the contents of a file in the current working directory. When the command is selected, the program should display a list of filenames and a prompt for the name of the file to be viewed.

Be sure to include error recovery in the program. If the user enters a filename that does not exist they should be prompted to enter a filename that does exist.

An example of the program input and output is shown below:

/root/sandbox 1 List the current directory 2 Move up 3 Move down 4 Number of files in the directory 5 Size of the directory in bytes 6 Search for a file name 7 View the contents of a file 8 Quit the program Enter a number: 7 Files in /root/sandbox: filesys.py example.txt Enter a file name from these names: example.txt THIS IS CONTENT OF AN EXAMPLE FILE. /root/sandbox 1 List the current directory 2 Move up 3 Move down 4 Number of files in the directory 5 Size of the directory in bytes 6 Search for a file name 7 View the contents of a file 8 Quit the program Enter a number: 8 Have a nice day!
 
"""
File: filesys.py
Project 6.6

Provides a menu-driven tool for navigating a file system
and gathering information on files.

Adds a command to view a file's contents.
"""

import os, os.path

QUIT = '8'

COMMANDS = ('1', '2', '3', '4', '5', '6', '8')

MENU = """1   List the current directory
2   Move up
3   Move down
4   Number of files in the directory
5   Size of the directory in bytes
6   Search for a file name
8   Quit the program"""

def main():
    while True:
        print(os.getcwd())
        print(MENU)
        command = acceptCommand()
        runCommand(command)
        if command == QUIT:
            print("Have a nice day!")
            break

def acceptCommand():
    """Inputs and returns a legitimate command number."""
    while True:
        command = input("Enter a number: ")
        if not command in COMMANDS:
            print("Error: command not recognized")
        else:
            return command

def runCommand(command):
    """Selects and runs a command."""
    if command == '1':
        listCurrentDir(os.getcwd())
    elif command == '2':
        moveUp()
    elif command == '3':
        moveDown(os.getcwd())
    elif command == '4':
        print("The total number of files is", \
              countFiles(os.getcwd()))
    elif command == '5':
        print("The total number of bytes is", \
              countBytes(os.getcwd()))
    elif command == '6':
        target = input("Enter the search string: ")
        fileList = findFiles(target, os.getcwd())
        if not fileList:
            print("String not found")
        else:
            for f in fileList:
                print(f)
     # add your condition here
    elif command == '8':
           print("Files in", os.getcwd())
           print(listCurrentDir(os.getcwd()))
    viewFile = input("Enter a file name from these names: ")
    viewFile()

def viewFile(dirName):
   # write your code here
   f = open("viewFile", "r")
   print(f.read) 
   print("")

def listCurrentDir(dirName):
    """Prints a list of the cwd's contents."""
    lyst = os.listdir(dirName)
    for element in lyst: print(element)

def moveUp():
    """Moves up to the parent directory."""
    os.chdir("..")

def moveDown(currentDir):
    """Moves down to the named subdirectory if it exists."""
    newDir = input("Enter the directory name: ")
    if os.path.exists(currentDir + os.sep + newDir) and \
       os.path.isdir(newDir):
        os.chdir(newDir)
    else:
        print("ERROR: no such name")

def countFiles(path):
    """Returns the number of files in the cwd and
    all its subdirectories."""
    count = 0
    lyst = os.listdir(path)
    for element in lyst:
        if os.path.isfile(element):
            count += 1
        else:
            os.chdir(element)
            count += countFiles(os.getcwd())
            os.chdir("..")
    return count

def countBytes(path):
    """Returns the number of bytes in the cwd and
    all its subdirectories."""
    count = 0
    lyst = os.listdir(path)
    for element in lyst:
        if os.path.isfile(element):
            count += os.path.getsize(element)
        else:
            os.chdir(element)
            count += countBytes(os.getcwd())
            os.chdir("..")
    return count

def findFiles(target, path):
    """Returns a list of the file names that contain
    the target string in the cwd and all its subdirectories."""
    files = []
    lyst = os.listdir(path)
    for element in lyst:
        if os.path.isfile(element):
            if target in element:
                files.append(path + os.sep + element)
        else:
            os.chdir(element)
            files.extend(findFiles(target, os.getcwd()))
            os.chdir("..")
    return files

if __name__ == "__main__":
    main()
Expert Solution
trending now

Trending now

This is a popular solution!

steps

Step by step

Solved in 2 steps

Blurred answer
Knowledge Booster
Graphical User Interface
Learn more about
Need a deep-dive on the concept behind this application? Look no further. Learn more about this topic, computer-science and related others by exploring similar questions and additional content below.
Similar questions
  • SEE MORE QUESTIONS
Recommended textbooks for you
Programming Logic & Design Comprehensive
Programming Logic & Design Comprehensive
Computer Science
ISBN:
9781337669405
Author:
FARRELL
Publisher:
Cengage