Question

In: Computer Science

Python Add a command to this chapter’s case study program that allows the user to view...

Python

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!

Code to use:

"""

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

def viewFile(dirName):

   # write your code here

   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()

Solutions

Expert Solution

  


Related Solutions

Create a python program that will: prompt a user for a command Command get_data Level 1:...
Create a python program that will: prompt a user for a command Command get_data Level 1: Take one of the commands my_max my_min my_range my_sum mean median mode fib factorize prime Requirements: Your commands should be case-insensitive You should use python lists to store data You should NOT use built-in python math functions, or math libraries to compute these values Tips: Write one function that will convert a string with comma-separated numbers into a python list with the numbers. You...
Write a Java program that allows the user to specify a file name on the command...
Write a Java program that allows the user to specify a file name on the command line and prints the number of characters, words, lines, average number of words per line, and average number of characters per word in that file. If the user does not specify any file name, then prompt the user for the name.
Create a Python program that: Allows the user to enter a phrase or sentence. The program...
Create a Python program that: Allows the user to enter a phrase or sentence. The program should then take the phrase or sentence entered Separate out the individual words entered Each individual word should then be added to a list After all of the words have been place in a list Sort the contents of the list Display the contents of the sorted list with each individual word displayed on a separate line Display a message to the user indicating...
How to do this in Python (using Lists): Create a python program that allows a user...
How to do this in Python (using Lists): Create a python program that allows a user to display, sort and update as needed a List of U.S States containing the State Capital and State Bird. You will need to embed the State data into your Python code. The user interface will allow the user to perform the following functions: 1. Display all U.S. States in Alphabetical order along with Capital and Bird 2. Search for a specific state and display...
Use Visual Python or equivalent, to write a program that allows the user to observe the...
Use Visual Python or equivalent, to write a program that allows the user to observe the following: Damped and forced harmonic oscillators. The program should be user friendly and have default values for the initial velocities, positions, masses, and spring constants as well as damping constants. Values and frequencies for the forced oscillators should also be given. It should allow the user to input values for the velocities, positions, spring constants, and masses. The program should determine automatically the scale...
9) This is in Python Code a program that allows the user to manage its expenses...
9) This is in Python Code a program that allows the user to manage its expenses accepting the following commands: - Add <player_name> -> This command adds a new player to the system. Assume there can’t be repeated names. If a name already exists then an error is shown to the user. - Score <player_name> <score> -> This command adds the score to the player with the name player-name. Each score needs to be added individually - Report -> This...
In Python, write a program that allows the user to enter a number between 1-5 and...
In Python, write a program that allows the user to enter a number between 1-5 and returns the vitamins benefits based on what the user entered. The program should: Continue to run until the user quits and Validate the user’s input (the only acceptable input is 0, 1, 2, 3, 4, or 5), If the user enters zero “0” the program should terminate You can use the following facts: 1- Vitamin A protects eyes from night blindness and age-related decline...
In Python, write a program that allows the user to enter a number between 1-5 and...
In Python, write a program that allows the user to enter a number between 1-5 and returns the vitamins benefits based on what the user entered. The program should: Continue to run until the user quits and Validate the user’s input (the only acceptable input is 0, 1, 2, 3, 4, or 5), If the user enters zero “0” the program should terminate You can use the following facts: 1- Vitamin A protects eyes from night blindness and age-related decline...
USING PYTHON. Thank you in advance Write a program that allows the user to enter a...
USING PYTHON. Thank you in advance Write a program that allows the user to enter a series of string values into a list. When the user enters the string ‘done’, stop prompting for values. Once the user is done entering strings, create a new list containing a palindrome by combining the original list with the content of the original list in a reversed order. Sample interaction: Enter string: My Enter string: name Enter string: is Enter string: Sue Enter string:...
I am creating a program in Python that allows the user to input a credit card...
I am creating a program in Python that allows the user to input a credit card number, and determine if the card is valid. This should be done by taking every other number, starting from the right, and adding them together. The doubling each of the other digits, and adding them together as single digits, and then adding the two sums together. For example, if the number 4833 1200 3412 3456 is used, the first sum should be 6+4+2+4+0+2+3+8=29, the...
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT