from typing import Iterator
from ..files import PathLike
from .csv_iterator import CsvIterator
[docs]def iterate_csv_column(
    csv_file: PathLike, column: str, delimiter: str = ","
) -> Iterator[str]:
    """
    Iterate through a specific column of a CSV file.
    The CSV file is iterated through one line at a time, so that the memory footprint
    remains very small, even for large files.
    Args:
        csv_file: CSV file.
        column: Column to iterate through.
        delimiter: CSV delimiter.
    Raises:
        FileNotFoundError: if the file does not exist. Note: the exception is raised not
            raised if the iterator is not consumed.
        ValueError: if the column is not valid. Note: the exception is raised not
            raised if the iterator is not consumed.
    Returns:
        iterator through the values in the selected column.
    """
    with open(csv_file, "rt") as f:
        csv_iterator = CsvIterator.from_stream(f, delimiter=delimiter)
        column_index = csv_iterator.column_index(column_name=column)
        yield from (row[column_index] for row in csv_iterator.rows)