Skip to content

Commit 9debcd6

Browse files
feat: implement Python version of mycat command
1 parent da6e7e9 commit 9debcd6

File tree

1 file changed

+41
-0
lines changed
  • implement-shell-tools/cat/sample-files

1 file changed

+41
-0
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#!/usr/bin/env python3
2+
import sys
3+
import os
4+
5+
def print_file(filename, number_all=False, number_nonempty=False):
6+
try:
7+
with open(filename, 'r') as f:
8+
lines = f.readlines()
9+
except FileNotFoundError:
10+
print(f"cat: {filename}: No such file")
11+
return
12+
13+
counter = 1
14+
for line in lines:
15+
line = line.rstrip('\n')
16+
if number_all:
17+
print(f"{counter:6} {line}")
18+
counter += 1
19+
elif number_nonempty:
20+
if line.strip():
21+
print(f"{counter:6} {line}")
22+
counter += 1
23+
else:
24+
print(line)
25+
else:
26+
print(line)
27+
28+
def main():
29+
import argparse
30+
31+
parser = argparse.ArgumentParser(description="A Python implementation of cat")
32+
parser.add_argument('files', nargs='+', help="Files to print")
33+
parser.add_argument('-n', '--number-all', action='store_true', help="Number all lines")
34+
parser.add_argument('-b', '--number-nonempty', action='store_true', help="Number non-empty lines")
35+
args = parser.parse_args()
36+
37+
for file in args.files:
38+
print_file(file, number_all=args.number_all, number_nonempty=args.number_nonempty)
39+
40+
if __name__ == "__main__":
41+
main()

0 commit comments

Comments
 (0)