Примените один и тот же процесс к нескольким файлам в одной папке, используя Python - PullRequest
0 голосов
/ 30 сентября 2019

Мне нужно прочитать все CSV-файлы в определенной папке, а затем применить определенный процесс (вычислить некоторые параметры) для каждого файла, и для каждого файла мне нужно создать файл Excel, в котором я должен сохранить результаты. На данный момент я смог применить расчет для каждого файла вручную, но мне нужно автоматизировать процесс, что означает, что единственным вводом должно быть имя папки, а не проходить через папку, и каждый CSV-файл рассматривается как ввод. Мне посоветовали использовать Pandas, но я не мог понять, как.

Мой вопрос, возможно ли вообще сделать это с Python?

Это часть моего кода:

main.py

from Dlt2Excel_Fct  import *
from ModePrvPblc_Fct  import *
from FilePaths import filename_csv, filename_asc, filepath
start = time.time()
dlt2excel()
ModePrvPblcGps()
duree = time.time()-start
print('duree', duree)

Dlt2Excel_Fct.py

import pandas as pd
import xlsxwriter
import sys
import os

from tkinter import filedialog
from tkinter import *

from FilePaths import filename_csv

def dlt2excel(): 

    """ Enter the directory of the exported csv file"""
    user_input=filename_csv
#    user_input = input("Enter the path of your file: ")
    assert os.path.exists(user_input), "I did not find the file at, "+str(user_input)
    f = open(user_input,'r+')
    print("We found your file!")

    """Organize the exported file """
    inputFile = f
    workbook = xlsxwriter.Workbook('output01.xlsx')
    worksheet = workbook.add_worksheet()

    exportFile = open('output01.xlsx', 'w')
    workbook.close() 

    for line in inputFile:
        new_line = line.replace(',', '\t')
        exportFile.write(new_line)  

    f.close()
    inputFile.close()
    exportFile.close()

    df = pd.read_table('output01.xlsx', error_bad_lines=False) # for '\t'
    df.to_excel('output1.xlsx', 'Sheet1')

    """Count the number of duplicates """
    data = pd.read_excel(r'output1.xlsx', header = 0)
    data.count()
    data['count'] = data.groupby(['Payload'])['Index'].transform('count')
    data.to_excel('OutputDLT.xlsx', sheet_name='sheet1', index=False)
    print("Conversion is done!\n")

ModePrvPblc_Fct.py

import openpyxl
from openpyxl import Workbook
from openpyxl import load_workbook
#from ExcelName import filepath
from FilePaths import filepath

filename =filepath

def ModePrvPblcGps():
    file_name='OutputDLT.xlsx'
    wb = openpyxl.load_workbook(file_name, read_only=False) 
    ws = wb.active
    sheet = wb['sheet1']
    ls = []
    PsgPrv=0
    PsgPblc=0


    for row in ws.iter_rows():
        for cell in row:
            #print('Cell: [{}] is type({}): "{}"'.format(cell.coordinate, type(cell.value).__name__, cell.value))
            if cell.value == 'SQLR: K<ATT_PRIVACY_MODE> V<1>':
                PsgPrv+=1
            if cell.value == 'SQLR: K<ATT_PRIVACY_MODE> V<0>':
                PsgPblc+=1

    print('Passage en mode public: ', PsgPblc)        
    print('Passage en mode privé: ', PsgPrv)
    wb = load_workbook(filename)
    ws = wb.worksheets[0]
    parametres = ( 
        ['Passage en mode privé ', PsgPrv],
        ['Passage en mode public ', PsgPblc],
    ) 
    for row_ in (parametres):
        ws.append(row_ )    
    wb.save(filename)

FilePaths.py

import tkinter as tk
from tkinter.simpledialog import askstring
from tkinter import filedialog
import os
import openpyxl
import warnings
warnings.filterwarnings("ignore")

root = tk.Tk()

folder_selected = filedialog.askdirectory()
print(folder_selected)
path=folder_selected + "/"
nom = askstring("Name", "Enter the name of the result file")
print(nom)
if nom == None:
    nom= str(None)
else:
    nom = nom +".xlsx"
    if not os.path.exists(path):
        os.makedirs(path)
    filepath = path +nom
    if not os.path.isfile(filepath):
        wb = openpyxl.Workbook(filepath)  
        wb.save(filename = filepath)

    root.file_name =  filedialog.askopenfilename(initialdir = "/",title = "Select csv file",filetypes = (("csv files","*.csv"),("all files","*.*")))
    filename_csv=root.file_name
    print (filename_csv)  

    root.file_name1 =  filedialog.askopenfilename(initialdir = "/",title = "Select trace file",filetypes = (("asc files","*.asc"),("all files","*.*")))
    filename_asc=root.file_name1
    print (filename_asc)           
root.withdraw()

У меня много папок, содержащих несколько файлов CSV, поэтому янужно автоматизировать процесс.

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