копировать вставить файлы из разных каталогов в одну папку - PullRequest
0 голосов
/ 08 июля 2019

Я снова застрял! моя история такова:

Мне нужно найти файлы с именем "tv.sas7bdat", которые существуют в разных папках в каталоге, и сохранить содержимое всех найденных файлов в один файл Excel на моем рабочем столе. С моим настоящим Кодексом я могу получить все пути для этого файла и перенести их содержимое в фрейм данных. Но я не могу добавить все кадры данных в один файл Excel.

В моем Excel я нахожу только последний фрейм данных!

Вот мой код,

import pandas as pd
from sas7bdat import SAS7BDAT
import os

path = "\\"
newpath = "\\"

files = []
# r=root, d=directories, f = files
for r, d, f in os.walk(path):
    for file in f:
        if 'tv.sas7bdat' in file:
            files.append(os.path.join(r,  file))

lenf = range(len(files))
for f in files:
    print(f)

for df in lenf:

    with SAS7BDAT(f) as file:
        df = file.to_data_frame()
        print(df)

    group =pd.concat([df], axis=0, sort=True, ignore_index = True)
    df.to_excel(newpath + 'dataframes_tv.xlsx',index=False)

Ответы [ 2 ]

1 голос
/ 08 июля 2019

если вы не хотите менять свой код, вы можете enumerate свой список файлов, чтобы разделить процесс, получив первый файл из вашего списка, чтобы назначить начальный кадр данных в качестве заполнителя на одной стороне, а затем остальные файлыв списке, чтобы добавить все остальные кадры данных к исходному

РЕДАКТИРОВАТЬ фрагмент вашего кода с enumerate и ваш files список

    # save the first dataframe from 1st list element
    df = SAS7BDAT(files[0]).to_data_frame()

    # enumerate the list to access greater elements
    for k, f in enumerate(files):
        # from 2nd element onward
        if k > 0:
            with SAS7BDAT(f[k]) as file:
                # append all elements to the 1st
                df = df.append(file.to_data_frame())

    group = pd.concat([df], axis=0, sort=True, ignore_index=True)
    df.to_excel('dataframes_tv.xlsx', index=False)
1 голос
/ 08 июля 2019

Возможно, вы захотите использовать модуль shutil, он позволяет копировать каталоги и файлы в них, используя функцию copytree. Пример:

import shutil
shutil.copytree('/path/to/source', 'path/to/destination')
...