Как получить строку в CSV, создать новый CSV по имени строки и добавить эту конкретную строку к нему?
Это пример моего CSV-файла:
04/Feb/2016:06:38:44-0500,ab,3,10,57,200,10254
04/Feb/2016:06:39:07-0500,cd,1,42,168,304,0
04/Feb/2016:06:39:07-0500,ef,1,43,169,304,0
04/Feb/2016:06:39:07-0500,ab,1,43,170,304,0
04/Feb/2016:06:39:07-0500,cd,1,44,171,304,0
04/Feb/2016:06:39:07-0500,ef,1,45,172,304,0
Я хотел бы получить строку во 2-м столбце, создать файл с именем, похожим на эту строку, если файл еще не существует, и добавить эту конкретную строку в файл. Так что-то вроде этого:
fetch string in 2nd column -> "ab" -> if file doesnt exist create file called "ab.csv" -> open file and add line "04/Feb/2016:06:38:44-0500,ab,3,10,57,200,10254"
fetch string in 2nd column -> "cd" -> if file doesnt exist create file called "cd.csv" -> open file and add line "04/Feb/2016:06:39:07-0500,cd,1,42,168,304,0"
fetch string in 2nd column -> "ef" -> if file doesnt exist create file called "ef.csv" -> open file and add line "04/Feb/2016:06:39:07-0500,ef,1,43,169,304,0"
fetch string in 2nd column -> "ab" -> if file doesnt exist create file called "ab.csv" -> open file and add line "04/Feb/2016:06:39:07-0500,ab,1,43,170,304,0"
fetch string in 2nd column -> "cd" -> if file doesnt exist create file called "cd.csv" -> open file and add line "04/Feb/2016:06:39:07-0500,cd,1,44,171,304,0"
fetch string in 2nd column -> "ef" -> if file doesnt exist create file called "ef.csv" -> open file and add line "04/Feb/2016:06:39:07-0500,ef,1,45,172,304,0"
Результат:
ab.csv:
04/Feb/2016:06:38:44-0500,ab,3,10,57,200,10254
04/Feb/2016:06:39:07-0500,ab,1,43,170,304,0
----------------------------------------------
cd.csv:
04/Feb/2016:06:39:07-0500,cd,1,42,168,304,0
04/Feb/2016:06:39:07-0500,cd,1,44,171,304,0
----------------------------------------------
ef.csv:
04/Feb/2016:06:39:07-0500,ef,1,43,169,304,0
04/Feb/2016:06:39:07-0500,ef,1,45,172,304,0
Любая помощь ценится!
2 ответа
Решение
С помощью awk
$ awk -F, '{print >> $2".csv"}' file.csv
$ cat ab.csv
04/Feb/2016:06:38:44-0500,ab,3,10,57,200,10254
04/Feb/2016:06:39:07-0500,ab,1,43,170,304,0
$ cat cd.csv
04/Feb/2016:06:39:07-0500,cd,1,42,168,304,0
04/Feb/2016:06:39:07-0500,cd,1,44,171,304,0
$ cat ef.csv
04/Feb/2016:06:39:07-0500,ef,1,43,169,304,0
04/Feb/2016:06:39:07-0500,ef,1,45,172,304,0
$
Имейте в виду, что реальные CSV-файлы могут содержать запятые в кавычках в своих полях, разделенных запятыми, поэтому для серьезного использования всегда рекомендуется использовать правильный анализатор CSV: см., Например, Как читать CSV-файл с помощью Perl? или PyMOTW: файлы значений, разделенные запятыми.
Я не знаю, если вы все еще ищете питоническое решение. Я поражен простотой ответа стального водителя, не понял awk
это так сильно.
#!/usr/bin/env python
import csv
import os
def main():
with open("file.csv", "rb") as f:
reader = csv.reader(f)
for row in reader:
fname = row[1] + ".csv"
with open(fname, 'w') as f:
f.write(','.join([i for i in row]))
main()
Не вините меня за то, что я пытался:D за блестящую награду