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

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...
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...
Jack just completed the program for the Flesch text analysis from this chapter’s case study. His...
Jack just completed the program for the Flesch text analysis from this chapter’s case study. His supervisor, Jill, has discovered an error in his code. The error causes the program to count a syllable containing consecutive vowels as multiple syllables. Suggest a solution to this problem in Jack’s code and modify the program so that it handles these cases correctly. An example text and the program input and output is shown below: example.txt Or to take arms against a sea...
Write a program using Python that allows the user to play a guessing game (please provide...
Write a program using Python that allows the user to play a guessing game (please provide a picture of code so it is easier to read). The game will choose a "secret number", a positive integer less than 10000. The user has 10 tries to guess the number. Requirements: Normally, we would have the program select a random number as the "secret number". However, for the purpose of testing your program (as well as grading it), simply use an assignment...
PYTHON (BEGINNER) program that allows the user to choose any of the three sports options described...
PYTHON (BEGINNER) program that allows the user to choose any of the three sports options described below and computes the relevant statistic in each case: Quidditch Score Total: Determined based on the number of goals and whether or not the snitch was caught. A goal is scored by propelling the quaffle through a hoop and each earns the team 10 points. If a team catches the snitch, that team earns an additional 30 points. The snitch can be caught at...
USING PYTHON PROGRAM Part 4b: Addition Table Next, add in a feature that asks the user...
USING PYTHON PROGRAM Part 4b: Addition Table Next, add in a feature that asks the user if they want to identify 'Prime' numbers in their table. If the user elects to show prime numbers you can print a lowercase 'p' character after each prime number. Ensure that your table displays correctly, as described above. Lowest number: 0 Highest number: 10 Would you like to identify Prime numbers in your table? (y/n): pikachu Invalid command, try again Would you like to...
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT