How to open a semicolon-delimited CSV file in Excel (or turn it into a comma one)
You open a CSV and every row is crammed into column A, or you open a file from a European colleague and the columns are split in the wrong places. The cause is that "CSV" does not say which character separates the values. Excel uses the list separator from your computer's regional settings: a comma in the US and UK, a semicolon in many countries that write decimals with a comma (Germany, France, the Netherlands and others). A file made with one convention and opened on a computer set to the other looks broken, but nothing is wrong with the data.
Option 1: import the file and choose the separator
This works regardless of settings. The menu names below are from current Microsoft 365 Excel; older versions use a "Text Import Wizard" with the same choices, and we have not tested every version.
- Open a blank workbook and choose Data › From Text/CSV.
- Pick the file. In the preview, set Delimiter to Semicolon (or Comma, as the case may be).
- Check that accented letters look right; if not, set File Origin to 65001: Unicode (UTF-8) (see garbled characters).
- Choose Load.
Option 2: tell Excel in the file itself
Excel reads a first line of the form sep=; as an instruction about the separator and does not show it as data. This is widely reported to work, but it is a quirk
that we have not tested in every Excel version, and every other program treats that line as an ordinary row, so only use it on a copy meant for Excel.
Option 3: convert the file to commas
The conversion has to use a real CSV parser: a naive find-and-replace of ; by , breaks any value that already contains either character. The sample file below has a quoted value containing a semicolon (Brot; frisch) and decimal commas (3,50), which is exactly where replacement goes wrong.
import csv
with open("semicolon.csv", newline="", encoding="utf-8-sig") as src, \
open("comma.csv", "w", newline="", encoding="utf-8-sig") as dst:
csv.writer(dst).writerows(csv.reader(src, delimiter=";"))
print(open("comma.csv", encoding="utf-8-sig").read())
Produkt,Preis,Menge Käse,"3,50",2 Brot; frisch,"2,20",1
The writer automatically puts quotes around 3,50 and Brot; frisch where needed. The result is correct CSV, but remember that
a computer set to a decimal-comma locale will read 3,50 as 3.5 only if the column is imported as a number in that locale. If the numbers matter, check a few totals after converting.
Option 4: change the separator your computer uses
In Windows this is a regional setting (the list separator under the additional date, time and regional settings in Control Panel). It changes the behaviour of Excel for every file and for other programs too, so use it only if you work with that kind of file all day.
Reading the file with code
In Python, pass delimiter=";" to csv.reader as above. The point is the same everywhere: say which separator the file uses; do not make the program guess.
Last updated 2026-10-27. Code on this page was run on that date and the output shown is the real output. Spreadsheet menu steps are written from Microsoft's and Google's documented behaviour; where we have not run something ourselves, the page says so.