open(path, mode, encoding=...) opens a file: "r" reads (the default), "w" replaces the file, and "a" adds to the end, creating it if needed. Always pass encoding="utf-8" unless you know the file uses something else.
Files from older Windows programs are often Windows-1252 ("cp1252"): reading one as UTF-8 raises UnicodeDecodeError on letters like é or ü. Files saved as "CSV UTF-8" by Excel start with an invisible byte order mark, which ends up glued to the first column name; encoding="utf-8-sig" drops it.
pathlib.Path makes paths easy to work with: Path("reports") / "march.csv" joins parts, .exists() checks for a file, .read_text() and .write_text() do a whole file at once, and Path(".").glob("sales_*.csv") finds files by pattern. .stem is the name without its extension, and .suffix is the extension.