-
-
Notifications
You must be signed in to change notification settings - Fork 42
London | SDC-Nov-25 | Emiliano Uruena | Sprint 4 | Implement shell Tools Python #283
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,42 @@ | ||
| import sys | ||
|
|
||
| def cat_file(filename, flag): | ||
| try: | ||
| with open(filename, 'r') as file: | ||
| if not flag: | ||
| for line in file: | ||
| print(line, end="") | ||
|
|
||
| elif flag == "-n": | ||
| for index, line in enumerate(file, start=1): | ||
| print(f"{index:6}\t{line}", end="") | ||
|
|
||
| elif flag == "-b": | ||
| line_number = 1 | ||
| for line in file: | ||
| if line.strip() == "": | ||
| print(line, end="") | ||
| else: | ||
| print(f"{line_number:6}\t{line}", end="") | ||
| line_number += 1 | ||
|
|
||
| except FileNotFoundError: | ||
| print(f"cat: {filename}: No such file or directory", file=sys.stderr) | ||
|
|
||
| def main(): | ||
| args = sys.argv[1:] | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Do you know of any easier ways to help build argument parsing? you can do it manually, but you are missing a help option, and adding more complex arguments might get complicated in larger scripts. |
||
|
|
||
| flag = False | ||
|
|
||
| if "-n" in args: | ||
| flag = "-n" | ||
| args.remove("-n") | ||
| elif "-b" in args: | ||
| flag = "-b" | ||
| args.remove("-b") | ||
|
|
||
| for filename in args: | ||
| cat_file(filename, flag) | ||
|
|
||
| if __name__ == "__main__": | ||
| main() | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,33 @@ | ||
| import sys | ||
| import os | ||
|
|
||
| def main(): | ||
| args = sys.argv[1:] | ||
|
|
||
| path = "." | ||
| one_per_line = False | ||
| show_hidden = False | ||
|
|
||
| for arg in args: | ||
| if arg == "-a": | ||
| show_hidden = True | ||
| elif arg == "-1": | ||
| one_per_line = True | ||
| elif not arg.startswith("-"): | ||
| path = arg | ||
|
|
||
| entries = os.listdir(path) | ||
|
|
||
| entries.sort() | ||
|
|
||
| if not show_hidden: | ||
| entries = [f for f in entries if not f.startswith(".")] | ||
|
|
||
| if one_per_line: | ||
| for entry in entries: | ||
| print(entry) | ||
| else: | ||
| print(" ".join(entries)) | ||
|
|
||
| if __name__ == "__main__": | ||
| main() |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,66 @@ | ||
| import sys | ||
|
|
||
| def count_file(filename): | ||
|
|
||
| with open(filename, 'r') as file: | ||
| content = file.read() | ||
|
|
||
| lines = len(content.splitlines()) | ||
| words = len(content.split()) | ||
| chars = len(content) | ||
|
|
||
| return (lines, words, chars) | ||
|
|
||
|
|
||
| def format_output(lines, words, chars, filename, show_l, show_w, show_c): | ||
| parts = [] | ||
|
|
||
| if show_l: | ||
| parts.append(f"{lines:8}") | ||
| if show_w: | ||
| parts.append(f"{words:8}") | ||
| if show_c: | ||
| parts.append(f"{chars:8}") | ||
|
|
||
| parts.append(filename) | ||
|
|
||
| return " ".join(parts) | ||
|
|
||
| def main(): | ||
| args = sys.argv[1:] | ||
|
|
||
| l = w = c = False | ||
| files = [] | ||
|
|
||
| for arg in args: | ||
| if arg == "-l": | ||
| l = True | ||
| elif arg == "-w": | ||
| w = True | ||
| elif arg == "-c": | ||
| c = True | ||
| elif not arg.startswith("-"): | ||
| files.append(arg) | ||
|
|
||
| if not (l or w or c): | ||
| l = w = c = True | ||
|
|
||
| total_lines = total_words = total_chars = 0 | ||
| processed_files = 0 | ||
|
|
||
| for filename in files: | ||
| result = count_file(filename) | ||
| if result: | ||
| lines, words, chars = result | ||
| print(format_output(lines, words, chars, filename, l, w, c)) | ||
|
|
||
| total_lines += lines | ||
| total_words += words | ||
| total_chars += chars | ||
| processed_files += 1 | ||
|
|
||
| if processed_files > 1: | ||
| print(format_output(total_lines, total_words, total_chars, "total", l, w, c)) | ||
|
|
||
| if __name__ == "__main__": | ||
| main() |
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Did you mean to make changes to this file? We try to keep pull requests specific to just the files in the feature we are changing - for this, everything within the shell tools sprint task directory. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
good use of python formatting