Homework 04: cut.py
This commit is contained in:
parent
4fb62a22f3
commit
60d4cd0331
1 changed files with 44 additions and 8 deletions
|
|
@ -13,8 +13,8 @@ def usage(exit_status: int=0) -> None:
|
|||
|
||||
Print selected parts of lines from stream to standard output.
|
||||
|
||||
-d DELIMITER Use DELIM instead of TAB for field delimiter
|
||||
-f FIELDS Select only these fields''', file=sys.stderr)
|
||||
-d DELIMITER Use DELIM instead of TAB for field delimiter
|
||||
-f FIELDS Select only these fields''', file=sys.stderr)
|
||||
sys.exit(exit_status)
|
||||
|
||||
def strs_to_ints(strings: list[str]) -> list[int]:
|
||||
|
|
@ -23,7 +23,13 @@ def strs_to_ints(strings: list[str]) -> list[int]:
|
|||
>>> strs_to_ints(['2', '4'])
|
||||
[2, 4]
|
||||
'''
|
||||
pass
|
||||
|
||||
int_list = []
|
||||
|
||||
for string in strings:
|
||||
int_list.append(int(string))
|
||||
|
||||
return int_list
|
||||
|
||||
def cut_line(line: str, delimiter: str='\t', fields: list[int]=[]) -> list[str]:
|
||||
''' Return selected fields from line separated by delimiter.
|
||||
|
|
@ -31,7 +37,15 @@ def cut_line(line: str, delimiter: str='\t', fields: list[int]=[]) -> list[str]:
|
|||
>>> cut_line('Harder, Better, Faster, Stronger', ',', [2, 4])
|
||||
[' Better', ' Stronger']
|
||||
'''
|
||||
pass
|
||||
|
||||
parts = line.split(delimiter)
|
||||
selected = []
|
||||
for field in fields:
|
||||
index = field - 1
|
||||
if 0 <= index < len(parts):
|
||||
selected.append(parts[index])
|
||||
|
||||
return selected
|
||||
|
||||
def cut_stream(stream=sys.stdin, delimiter: str='\t', fields: list[int]=[]) -> None:
|
||||
''' Print selected parts of lines from stream to standard output.
|
||||
|
|
@ -39,7 +53,10 @@ def cut_stream(stream=sys.stdin, delimiter: str='\t', fields: list[int]=[]) -> N
|
|||
>>> cut_stream(io.StringIO('Harder, Better, Faster, Stronger'), ',', [2, 4])
|
||||
Better, Stronger
|
||||
'''
|
||||
pass
|
||||
|
||||
for line in stream:
|
||||
selected = cut_line(line.rstrip(), delimiter, fields)
|
||||
print(*selected, sep=delimiter) # Changed this line
|
||||
|
||||
# Main Execution
|
||||
|
||||
|
|
@ -53,12 +70,31 @@ def main(arguments=sys.argv[1:], stream=sys.stdin) -> None:
|
|||
Better, Stronger
|
||||
'''
|
||||
# Parse command line arguments
|
||||
pass
|
||||
delimiter = '\t'
|
||||
fields = []
|
||||
|
||||
args_iter = iter(arguments)
|
||||
for arg in arguments:
|
||||
if arg == '-h':
|
||||
usage(0)
|
||||
elif arg == '-d':
|
||||
i = arguments.index(arg)
|
||||
if i + 1 < len(arguments):
|
||||
delimiter = arguments[i + 1]
|
||||
elif arg == '-f':
|
||||
i = arguments.index(arg)
|
||||
if i + 1 < len(arguments):
|
||||
fields = strs_to_ints(arguments[i + 1].split(','))
|
||||
elif arg.startswith('-'):
|
||||
usage(1)
|
||||
|
||||
if not fields:
|
||||
usage(1)
|
||||
|
||||
# Cut stream with delimiter and fields
|
||||
pass
|
||||
cut_stream(stream, delimiter, fields)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
||||
# vim: set sts=4 sw=4 ts=8 expandtab ft=python:
|
||||
# vim: set sts=4 sw=4 ts=8 expandtab ft=python:
|
||||
Loading…
Reference in a new issue