Как объединить каждые два CSV-файла из одной папки в один CSV-файл каждый? - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть папка с файлами в формате p1_1001.csv, p1_1002csv, p2_1001.csv, p2_1002.csv ...

Они являются данными части 1 и части 2 для одногоКандидаты 1001, 1002 ...

Я хочу объединить p1 и p2 для каждого кандидата.То есть сгенерируйте один файл CSV для каждого кандидата .. 1001,1002,1003 .. из той папки, где хранятся данные для обеих частей.Таким образом, первая часть - это номера следов от 1 до 49, а вторая - от 50 до 99. Я хочу объединить PI с p2 без заголовков p2. Поэтому получить один CSV-файл для участника 1001 из пробной версии 1 до 100 в одной папке

Я пытался работать с glob, но не могу заставить его работать.Может ли кто-нибудь помочь мне с этим?

Ответы [ 2 ]

1 голос
/ 04 апреля 2019

Я пробовал использовать glob , и он должен работать нормально.

import pandas as pd
import glob

_candidates = ['1001', '1002'] # All candidates
_candidate_files = [(candidate, glob.glob('./*{}.csv'.format(candidate))) for candidate in _candidates]

for candidate in _candidate_files:
    df = []
    for file in candidate[1]:
        file_df = pd.read_csv(file)
        df.append(file_df)
    df = pd.concat(df, axis=0)
    df.to_csv(candidate[0] + '.csv')

Для всех кандидатов, для которых вы хотите получить окончательный вариант, заполните список.Это, конечно, при условии, что p1 и p2 имеют выровненные столбцы.

0 голосов
/ 04 апреля 2019

Некоторые идеи здесь:

from os import listdir
from os.path import isfile, join

# step 1: list all csv in that directory
mypath = './foo/bar' # this should point to the directory where the csv resides
csvs = [f for f in listdir(mypath) if ('csv' in f and  isfile(join(mypath, f)))]    

# step 2: group CSVs that belong to one candidate
groups = {}
for c in csvs:
    (pNum, candidate) = c.split('_')
    if candidate not in groups:
        groups[candidate] = []
    groups[candidate].append(c)


# step 3: read contents for each group, append to one file
for candidate in groups:
    files = groups[candidate]        
    for f in files:
        with open(join(mypath, f) , 'r') as file:
            data = file.read()

        with open(candidate, 'a+') as outFile:                                
            outFile.write(data)
            # if you need to append newline at the end of every segment:
            outFile.write('\n')                

Приложение

: если использование pandas не является проблемой, я настоятельно рекомендую рассматривать pandas.read_csv как относительно безболезненный и беспроблемный способ обработки CSV. Если вы работаете в pandas DataFrame, вы также можете сделать pd.concat([df1, df2]) ( документы здесь ), чтобы логически объединить содержимое csv

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...