Мне нужно прочитать все 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, поэтому янужно автоматизировать процесс.