перемещение нескольких csv-файлов по значению столбца с помощью python

#python #pandas #csv

Вопрос:

У меня есть тысячи csv-файлов в родительской папке без категорий, все файлы имеют один столбец даты, содержащий одну и ту же дату для всех строк. Я хочу проверить значение даты каждого файла и переместить/скопировать в папку по месяцам с помощью python.

Я попробовал key = df.iloc[0][‘Дата’], но не смог использовать key.endswith или key.contains

Комментарии:

1. Какие решения вы пробовали? Каков формат этих файлов?

2. панды немного раздуты для этой задачи, так как вам нужно прочитать только строку заголовка (которую, судя по вашему сообщению, можно предположить, что она существует) и первую строку данных. Каков формат даты в столбце «Дата»?

3. Формат даты @jpf-ГГГГММДД

Ответ №1:

Здесь я просматриваю файлы, читая первую строку столбца даты. Я уже создавал новые папки в каталоге ранее, с именами каждого месяца года. Как только я прочитаю дату, я преобразую ее в слова (например, апрель, май). Затем я просматриваю папки в каталоге и, если имя даты и имя папки совпадают, я перемещаю файл в папку.

 import os
import pandas as pd
import datetime

files = os.listdir()
for file in files:
    if ".csv" in file:
        df = pd.read_csv(file)
        dates = df['date']
        date = dates[0]
        date = datetime.datetime.strptime(date, "%d/%m/%y")
        date = date.strftime("%B")
        for folder in files:
            if date.lower() == folder.lower():
                os.rename(file, folder "\" file)
 

Комментарии:

1. получение этой ошибки date = datetime.datetime.strptime(дата, «%d/%m/%y») Ошибка типа: аргумент strptime() 1 должен быть str, а не numpy.int64

2. в каком формате у вас свидание?

3. Формат даты-ГГГГММДД

Ответ №2:

Если все CSV-файлы имеют одинаковую структуру, например:

 date, col_1, col_2, ..., col_n
20210923, 123, 456, ..., 999
 

Вы можете попробовать:

 from os import mkdir
from os.path import join, exists, isdir
from glob import glob
from shutil import move
from datetime import datetime
import csv


FOLDER_CSV = 'data/csv'
FOLDER_MONTHS = 'data/csv_by_month'
DATE_FORMAT = '%Y%m%d'

if not exists(FOLDER_MONTHS):
    mkdir(FOLDER_MONTHS)
    
for file in glob(join(FOLDER_CSV, '*.csv')):
    with open(file, newline='') as ftx:
        reader = csv.reader(ftx)
        row = reader.__next__()
        row = reader.__next__()
    
    # Replaces the row[0] Index for index in the date column in the CSV
    month = datetime.strptime(row[0], DATE_FORMAT).strftime('%B').lower()
    
    if not exists(join(FOLDER_MONTHS, month)):
        mkdir(join(FOLDER_MONTHS, month))

    try:
        if isdir(join(FOLDER_MONTHS, month)):
            move(file, join(FOLDER_MONTHS, month))
    except OSError:
        print(f'{file} file is already in the {month} directory.')