Как выбрать строку в 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

Любая справка ценится!

3
задан 8 October 2016 в 10:58

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: Файлы данных с разделителями-запятыми .

5
ответ дан 1 December 2019 в 13:24

Я не знаю, ищете ли Вы все еще pythonic решение. Я поражен простотой в ответе steeldriver, не сделал реализованный 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 в солнечной щедрости

2
ответ дан 1 December 2019 в 13:24

Другие вопросы по тегам:

Похожие вопросы: