mirror of
https://github.com/soconnor0919/eceg431.git
synced 2025-12-12 23:24:43 -05:00
project 5.5 - complete
This commit is contained in:
61
055/bunny.py
Normal file
61
055/bunny.py
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
# counts occurrences of "bunny" in text files
|
||||||
|
# usage: python bunny.py <file_or_directory>
|
||||||
|
#
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
|
||||||
|
def count_bunny(filepath):
|
||||||
|
# Count "bunny" occurrences in a single file
|
||||||
|
# Skips comment lines and inline comments (anything after #)
|
||||||
|
count = 0
|
||||||
|
with open(filepath, 'r') as f:
|
||||||
|
for line in f:
|
||||||
|
line = line.strip()
|
||||||
|
# Skip full comment lines
|
||||||
|
if line.startswith('#'):
|
||||||
|
continue
|
||||||
|
# Remove inline comments (everything after #)
|
||||||
|
if '#' in line:
|
||||||
|
line = line[:line.index('#')]
|
||||||
|
# Count bunny (case insensitive)
|
||||||
|
count += line.lower().count('bunny')
|
||||||
|
return count
|
||||||
|
|
||||||
|
def main():
|
||||||
|
# take in one cli arg
|
||||||
|
target = sys.argv[1]
|
||||||
|
|
||||||
|
if os.path.isfile(target):
|
||||||
|
# single file
|
||||||
|
count = count_bunny(target)
|
||||||
|
filename = os.path.basename(target)
|
||||||
|
print(f"In {filename} I counted bunny {count} times.")
|
||||||
|
|
||||||
|
# write count to .out file
|
||||||
|
output_file = os.path.splitext(target)[0] + ".out"
|
||||||
|
with open(output_file, 'w') as f:
|
||||||
|
f.write(str(count))
|
||||||
|
|
||||||
|
elif os.path.isdir(target):
|
||||||
|
# is a dir- scan all .txt files
|
||||||
|
total = 0
|
||||||
|
if not target.endswith('/'):
|
||||||
|
# if the dir path does not end with a slash, add one
|
||||||
|
target += '/'
|
||||||
|
|
||||||
|
# count bunny in all .txt files
|
||||||
|
for file in os.listdir(target):
|
||||||
|
# iterate through each file
|
||||||
|
if file.endswith('.txt'):
|
||||||
|
total += count_bunny(target + file)
|
||||||
|
|
||||||
|
print(f"In {target} I counted bunny {total} times.")
|
||||||
|
|
||||||
|
# write total to <dirname>.out inside directory
|
||||||
|
dir_name = os.path.basename(target.rstrip('/'))
|
||||||
|
output_file = target + dir_name + ".out"
|
||||||
|
with open(output_file, 'w') as f:
|
||||||
|
f.write(str(total))
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
Reference in New Issue
Block a user