Я бы рекомендовал изучить библиотеку pandas. Вы можете делать всевозможные аккуратные манипуляции с табличными данными. Сначала прочитал в:
>>> import pandas as pd
>>> df = pd.read_csv("cars.ssv", sep=";")
>>> df
City Car model Color Registration number
0 Moscow Mercedes Red 1234
1 Moscow Mercedes Red 2345
2 Kiev Toyota Blue 3423
3 London Fiat Red 4545
Индекс его по-разному:
>>> moscmerc = df[(df["City"] == "Moscow") & (df["Car model"] == "Mercedes")]
>>> moscmerc
City Car model Color Registration number
0 Moscow Mercedes Red 1234
1 Moscow Mercedes Red 2345
>>> len(moscmerc)
2
Написать это:
>>> moscmerc.to_csv("moscmerc.ssv", sep=";", header=None, index=None)
>>> !cat moscmerc.ssv
Moscow;Mercedes;Red;1234
Moscow;Mercedes;Red;2345
Вы также можете работать на несколько групп сразу:
>>> df.groupby(["City", "Car model"]).size()
City Car model
Kiev Toyota 1
London Fiat 1
Moscow Mercedes 2
Dtype: int64
Обновление: @Anthon указал, что выше всего обрабатывается случай разделителя с запятой. Если файл имеет запятую повсюду, вы можете просто использовать ,
вместо ;
, так что это тривиально. Более интересным является случай, если разделитель не соответствует в файле, но это легко обрабатывается слишком:
>>> !cat cars_with_both.txt
City;Car model,Color;Registration number
Moscow,Mercedes;Red;1234
Moscow;Mercedes;Red;2345
Kiev,Toyota;Blue,3423
London;Fiat,Red;4545
>>> df = pd.read_csv("cars_with_both.txt", sep="[;,]")
>>> df
City Car model Color Registration number
0 Moscow Mercedes Red 1234
1 Moscow Mercedes Red 2345
2 Kiev Toyota Blue 3423
3 London Fiat Red 4545
Update # 2: а теперь текст на русском языке - конечно, это. : ^) Тем не менее, если все правильно закодировано, и ваш терминал настроен правильно, это тоже должно работать:
>>> df = pd.read_csv("russian_cars.csv", sep="[;,]")
>>> df
City Car model Color Registration number
0 Москва Mercedes красный 1234
1 Москва Mercedes красный 2345
2 Киев Toyota синий 3423
3 Лондон Fiat красный 4545
Большое вам спасибо за ваш ответ! – user2211803
+1 Хорошие примеры. Может быть немного задействован для новичка. – MattH
Пример имел только ';' но ОП заявил, что разделитель может быть либо «;» или ','. Я думаю, что ваш пример разбивается на первый «,», который используется как разделитель. – Anthon