Питон. Как прочитать несколько файлов .csv?

У меня более 200 файлов в формате .csv, и я хотел бы читать и вычислять два из них одновременно (текущий и следующий). Я пытаюсь использовать glob и фреймы данных pandas.

import glob

for file in glob.glob(path+'*.csv'):
    x1 = pd.read_csv(file, delimiter=',', dtype=None, names=('x', 'y'))
    x2 = pd.read_csv(file + 1 , delimiter=',', dtype=None, names=('x', 'y'))

У меня нет других идей.


person ruan    schedule 21.06.2017    source источник
comment
Предыдущий и следующий? Это не имеет смысла. Вы имеете в виду: текущий и следующий? или текущий и предыдущий?   -  person Abdou    schedule 21.06.2017
comment
@Abdou, ты прав - я хотел использовать текущий ;-)   -  person ruan    schedule 21.06.2017


Ответы (2)


Вы можете использовать рецепт pairwise из документации itertools:

from itertools import tee
def pairwise(iterable):
    "s -> (s0,s1), (s1,s2), (s2, s3), ..."
    a, b = tee(iterable)
    next(b, None)
    return zip(a, b)

Из: https://docs.python.org/3/library/itertools.html#itertools-recipes

и использование:

for file1, file2 in pairwise(glob.glob(path+'*.csv')):
    ...
person nitzpo    schedule 21.06.2017

Если вы хотите работать с текущим и следующим файлом на каждой итерации, выполните следующие действия:

from glob import glob


files = glob('*.csv')

for i, file in enumerate(files[:-1]):
    x1 = pd.read_csv(file, delimiter=',', dtype=None, names=('x', 'y'))
    x2 = pd.read_csv(files[i+1] , delimiter=',', dtype=None, names=('x', 'y'))
    # Do what you want to do

Это использует enumerate для отслеживания индекса текущего файла из последовательности files. Таким образом, вы можете получить «следующий файл», работая с «текущим» файлом, просто добавив 1 текущий индекс.

Надеюсь, это поможет.

person Abdou    schedule 21.06.2017