2013-12-19 5 views
5

Я действительно новичок в Python, поэтому этот вопрос может быть немного базовым. У меня есть 44 файла csv с одинаковыми заголовками и разными именами файлов. Я хочу объединить их все в один файл.Слияние файлов CSV в Python с разными именами файлов

Каждый файл с именем "[имя участника-] Votes- - (2010-2014) - [скачать времени] .csv"

Заголовки являются не включают в себя столбец для имени элемента. Я хотел бы добавить это как первый элемент.

Это часть того, что я хочу сделать: how to merge 200 csv files in Python. Я просто не уверен, как перебирать файлы с разными именами и добавлять эти имена в csv.

Спасибо!

ответ

7

Чтобы перебирать имена файлов вы можете использовать подобный метод, как ответил here, используя Glob:

import glob 
import os 
os.chdir("/mydir") 
for files in glob.glob("*.csv"): 
    print files 

Затем, чтобы добавить имя элемента в заголовке, вы можете напечатать все строки CSV-файлов построчно , Если строка является заголовком, затем напечатайте имя члена в той же строке, что и заголовок. (Это не реальный код, но вы можете получить точку)

for files in glob.glob("*.csv"): 
    for lines in files: 
     if line == header: 
       print member,line 
     else: 
       print line 

Чтобы разбить файл CSV и использовать только имя элемента (слегка модифицирована таким образом, чтобы не иметь дефис)

'Votes-[member name]-(2010-2014)-[download-time].csv'.split('-')[1] 

UPDATE для Баш решения: Вы можете сохранить этот текст и запустить его из терминала (см instructions здесь для Mac)

Генерация CSV файлов (не обязательно)

cat <<"EOF" > 1.csv 
1,2,3 
4,5,6 
EOF 

cat <<"EOF" > 2.csv 
a,b,c 
d,e,f 
EOF 

Parse CSV-файлы - этот скрипт принимает все файлы CSV и записывает их имя в качестве первого столбца. Он также помещает их в один файл (обратите внимание, что я тестировал на debian linux, а не на mac).

rm -f all.csv 
for fyle in *.csv ; do 
    echo | awk -v f=$fyle '{ print f","$0 }' $fyle >> all.csv 
done 
exit 0 

ВТОРАЯ UPDATE: Если вы хотите удалить дубликаты заголовков, самый простой способ из оболочки использовать «Grep -v», который выбирает все строки, которые не соответствуют. Вы можете выбрать общую строку, которая существует только в заголовке.

head -1 all.csv > nohead.csv # add one header line 
grep -v "header string" all.csv >> nohead.csv # add rest of rows, with no headers 
+0

Спасибо, я попробую это. Я нахожусь на Mac, если это имеет значение. – cassidycodes

+0

Я добавил решение, используя оболочку bash. – philshem

+0

Да, вот что я ищу! Есть ли способ включать только имя участника, а не целое имя файла? – cassidycodes

Смежные вопросы