Python cat.py

提供:onayami
2025年3月28日 (金) 21:26時点におけるMoutaku3dayo (トーク | 投稿記録)による版 (ページの作成:「<syntaxhighlight lang="python" line> import argparse import sys def cat(input_files, number_lines): """ Display the content of files or standard input. :param input_files: List of input file paths or None for standard input. :param number_lines: If True, number the output lines. """ line_number = 1 def process_file(file): nonlocal line_number try: for line in file: if number_lines:…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
import argparse
import sys

def cat(input_files, number_lines):
    """
    Display the content of files or standard input.

    :param input_files: List of input file paths or None for standard input.
    :param number_lines: If True, number the output lines.
    """
    line_number = 1

    def process_file(file):
        nonlocal line_number
        try:
            for line in file:
                if number_lines:
                    print(f"{line_number:6}  {line.rstrip()}")
                    line_number += 1
                else:
                    print(line, end="")
        except IOError as e:
            print(f"Error reading file: {e}", file=sys.stderr)

    if not input_files:
        # No files provided, read from standard input
        process_file(sys.stdin)
    else:
        for file_path in input_files:
            try:
                with open(file_path, "r") as file:
                    process_file(file)
            except FileNotFoundError:
                print(f"cat: {file_path}: No such file or directory", file=sys.stderr)
            except IOError as e:
                print(f"cat: {file_path}: Error: {e}", file=sys.stderr)

def main():
    parser = argparse.ArgumentParser(description="Python implementation of the cat command.")
    parser.add_argument("files", metavar="FILE", nargs="*", help="Files to display. Reads standard input if no files are provided.")
    parser.add_argument("-n", "--number", action="store_true", help="Number the output lines.")

    args = parser.parse_args()

    cat(input_files=args.files, number_lines=args.number)

if __name__ == "__main__":
    main()