#!/usr/bin/env python # coding: utf-8 # Open In Colab #

# # #

# # #

# # # # # Python file kezelés # # # # File kezelés txt, csv, xls, json, xml # # # # ## Numpy filekezelő rutinok # A numpy csomag array típusú változói számos előnyös tulajdonsággal rendelkeznek a sima list típusú változókhoz képest. # A numpy csomag biztosít néhány hasznos filekezelő rutint, melyek az array tipusú változók file-ba kiírására, illetve file-okból történő beolvasására használhatóak. # # # # ### Numpy bináris I/O # # Nagy tömbök kiíratása szöveges fájlokba nagyon lassú lehet. # # Nagyon fontos a gyors kiírás-beolvasás, érdemes lehet a numpy bináris save-load függvényeit használni. # # # In[ ]: get_ipython().run_line_magic('pylab', 'inline') # Populating the interactive namespace from numpy and matplotlib import random import os, sys print("Jelenlegi munka könyvtár1 " , os.getcwd()) ## munkakönyvtár kiírása #nagyobbacska tomb a = list(range(20)) for i in range(20): a[i]= i+1 # a.add(random.randint(1, 2048)) # a=random.random((2048,2048)) # a= random.randint(1, 2048) print('------ mentés v1') get_ipython().run_line_magic('time', "savetxt('out_tmp.txt',a)") print('------ mentésv2') get_ipython().run_line_magic('time', "save('out_tmp.npy',a)") print('------ olvas v1') get_ipython().run_line_magic('time', "a1=loadtxt('out_tmp.txt')") print('------ olvas v2') get_ipython().run_line_magic('time', "a2=load('out_tmp.npy')") print('------ filek mérete') # !du -h data/out_tmp.txt # !du -h data/out_tmp.npy # In[ ]: import numpy as np np.array([1, 2, 3]).tofile("a.bin") print (np.fromfile("a.bin", dtype=np.int64)) # In[ ]: ## A hdf fájlok A Hierarchical Data Format vagy röviden hdf, egy széles körben elterjedt formátum nagymennyiségű tudományos adatok tárolására, és megosztására. Két fontos verziója használatos, melyek nem igazán kompatibilisek. Itt a HDF5-ös fájlok megnyitásáról lesz szó, mely jelentősen egyszerűbb adatcsoportosítást használ az elődjénél (4-es verzió). A HDF5 fájlok esetében az értékes adatokat csoportokba, és alcsoportokba lehet rendezni, melyek között lehetőség van hivatkozásokat tenni. Úgy lehet elképzelni, mint egy kisebb fajta könyvtárszerkezetet, melyben szerteszét vannak az adatok. A HDF5 fájlok belső szerkezete két fő egységből építhető fel, mint ahogy az ábrán is látszik. Leíró részek azaz metadatok illetve maguk az adatok. Az adatokat többdimenziós adattáblákban tároljuk. Maga a HDF5 fájl belső csoportosítása hasonlóan hívható meg, mint egy hagyományos könyvtárstruktúra. Itt is definiálva van a "root" csoport, aminek alcsoportjai vannak, melyeknek (mint a könyvtárainknak) neveket adjhatunk. Egy adott adattömb elérési útvonala: /"csoportnév"/adatok A pythonban a hdf5 fájlokat a h5py csomag tudja legegyszerűbben beolvasni, így itt ennek a működését mutatjuk be. A HDF5 fájlok nagyon hatékonyan tudják a bonyolult adatszerkezeteket tárloni. A hatékony adattárolást nagyban segíti, hogy az adattömbök különböző relációkat és összefüggéseket is eltárolhatnak. Ennek persze az az ára, hogy az ilyen fájlok felhasználó általi olvasása nehezebb, mint az egyszerű szövegfájlok esetén, a konkrét adatok eléréséhez ismerni kell ezen fájlok felépítését. # # # ## H5 filek használata # # # In[ ]: import h5py f = h5py.File("store.h5", "r") print(list(f.keys()) )# ha nem rendezzük listába akkor nem írja ki szépen! print('--------------1') print(list(f["data"].keys()) ) print('--------------2') print(list(f["data"].values()) ) print('--------------3') # In[ ]: import os, sys print("Jelenlegi munka könyvtár1 " , os.getcwd()) ## munkakönyvtár kiírása df = pd.DataFrame([[1, 1.0, 'a']], columns=['x', 'y', 'z']) df.to_hdf('store.h5', 'data') reread = pd.read_hdf('store.h5') # In[ ]: import glob glob.glob('*.ipynb') ## .ipynb kiterjesztéső fájlok az aktuális könyvtárban. # ## List comprehension # # Az úgynevezett „list comprehension” („lista-felfogás”) módszer, amellyel kompakt módon tudunk listákat létrehozni. # # Lényege, hogy a lista elemeit nem direkt módon adjuk meg, hanem egy speciális iterációval. # # Itt nem szükséges egy komplett, klasszikus iterációt megírnunk, # hanem elintézhetjük ezt egy egyszerű, egyetlen soros összetett utasításban. # # # ### Klasszikus megoldás # # lista = [] # üres lista deklarációja # for i in xrange(1, 101): # iteráció 1-től 100-ig # lista.append(i) # a lista bővítése a ciklusváltozó aktuális értékével # # # ### List comprehension módszer: # # lista = [i for i in xrange(1, 101)] # a fentiek mind egy sorban # # # # #### Hogyan is épül fel az utasítás: # # = [ for in if ] # In[ ]: paros_negyzet = [i**2 for i in range(1, 101) if i % 2 == 0] ## páros négyzetek kikeresése print(paros_negyzet) # In[ ]: ## Könyvtár végilolvasásához alapok (játek a könyvtárakkal) import os, sys print("Jelenlegi munka könyvtár1 " , os.getcwd()) ## munkakönyvtár kiírása os.chdir(r"c:\Users\User\Documents\kepek\allat") ## munkakönyvtár beállítása print("Jelenlegi munka könyvtár2 " , os.getcwd()) ## munkakönyvtxxár kiírása ## ---------------- könyvtárban levő állományok listába olvasása 1. (walk) print('------------------- walk') from os import walk myfiles = [] mypath=os.getcwd() for (dirpath, dirnames, filenames) in walk(mypath): ## kiolvasás myfiles.extend(filenames) for i in myfiles: ## megjelenítés print(i) print('------------------- walk') # r=root, d=directories, f = files for r, d, f in os.walk(mypath): for file in f: if ".jpg" in file: print(os.path.join(r, file)) print('-------------------listdir') ## ---------------- könyvtárban levő állományok listába olvasása 2. (listdir) from os import listdir from os.path import isfile, join mypath=os.getcwd() myfiles = [f for f in listdir(mypath) if isfile(join(mypath, f))] for i in myfiles: ## megjelenítés print(i) print('------------------- glob') ## ---------------- könyvtárban levő kép (jpg) állományok listába olvasása 3. (glob) import glob myfiles = [] mypath=os.getcwd() print(mypath) # myfiles = glob.glob(mypath + r'\*.jpg') ## közvetlen betöltéssel és teljes elérési névvel # myfiles = [f for f in glob.glob("*.jpg")] ## list comprehension-al for file in glob.glob(r'*.jpg'): myfiles.append(file) for i in myfiles: ## megjelenítés print(i) print('------------------- lisdir') import os myfiles = [os.path.abspath(x) for x in os.listdir()] ## teljes elérési névvel for i in myfiles: ## megjelenítés print(i) print('------------------- glob és pathlib') import pathlib py = pathlib.Path().glob("*.jpg") for file in py: print(file) print('------------------- scandir') import os with os.scandir() as i: for entry in i: if entry.is_file(): print(entry.name) # ### CSV file mentés megnyítás # In[ ]: ## CSV file írása 1. # modul betöltése import csv import os, sys print("Jelenlegi munka könyvtár1 " , os.getcwd()) ## munkakönyvtár kiírása objs = [{'name': 'knut', 'age': 74, 'count': 13}, {'name': 'lydia', 'age': 14, 'count': 3}] headers = ['name', 'age', 'count'] with open("minta.csv", "w", newline='') as outfile: ## mező szeparátor: TAB : \t writer = csv.writer(outfile, delimiter="\t", quotechar='"', quoting=csv.QUOTE_ALL) ## ielőszőr a fejlécet írjuk ki writer.writerow(headers) ## ciklusban írjuk kia az adatokat for obj in objs: writer.writerow([obj[key] for key in headers]) print('kész a csv file írása') # In[ ]: ## CSV file írása 2. # modul betöltése import csv import os, sys print("Jelenlegi munka könyvtár1 " , os.getcwd()) ## munkakönyvtár kiírása with open('minta2.csv', 'w', newline='') as csvfile: spamwriter = csv.writer(csvfile, delimiter='\t', quotechar='"', quoting=csv.QUOTE_MINIMAL) spamwriter.writerow(['Felj'] * 2 + ['Fejl5']) spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam']) print('kész a csv file írása') # In[ ]: ## CSV file írása 3. # modul betöltése import csv import os, sys print("Jelenlegi munka könyvtár1 " , os.getcwd()) ## munkakönyvtár kiírása import csv with open('employee_file2.csv', mode='w', newline='') as csv_file: fieldnames = ['emp_name', 'dept', 'birth_month'] writer = csv.DictWriter(csv_file, fieldnames=fieldnames) writer.writeheader() writer.writerow({'emp_name': 'John Smith', 'dept': 'Accounting', 'birth_month': 'November'}) writer.writerow({'emp_name': 'Erica Meyers', 'dept': 'IT', 'birth_month': 'March'}) print('kész a csv file írása') # In[ ]: ## CSV file olvasása 1. # modul betöltése import csv import os, sys print("Jelenlegi munka könyvtár1 " , os.getcwd()) ## munkakönyvtár kiírása # olvasásra megnyitas csv1 = open('minta.csv', 'r') # változóba olvasás read = csv.reader(csv1) #tartalom megjelenitése soronként for row in read: print(row) # In[ ]: ## CSV file olvasása 2. import csv with open('minta.csv', newline='') as csvfile: spamreader = csv.reader(csvfile, delimiter='\t', quotechar='"') for row in spamreader: print(', '.join(row)) print('---------------- elválasztás') with open('minta2.csv', newline='') as csvfile: spamreader = csv.reader(csvfile, delimiter='\t', quotechar='"') for row in spamreader: print(', '.join(row)) # # # ## XLS és XLSX filek megnyítása olvasása írása (pandas) # # # In[ ]: ## excel olvasása import pandas as pd import numpy as np df = pd.read_excel(r'c:\Users\User\Documents\mintak\jupiter\kl\telepules.xlsx') print('kiírás kész') # In[ ]: import pandas as pd # xls beolvasás df = pd.read_excel(r'c:\Users\User\Documents\mintak\jupiter\kl\telepules.xlsx', sheet_name='telepules') # xls manipuláció df.drop(['lakos'], axis=3) # xls kiírás új állományba writer = pd.ExcelWriter(r'c:\Users\User\Documents\mintak\jupiter\kl\output.xlsx') df.to_excel(writer,'Sheet1') writer.save() print('kiírás kész') # In[ ]: import pandas as pd read_file = pd.read_excel (r'c:\Users\User\Documents\mintak\jupiter\kl\telepules.xlsx', sheet_name='telepules') read_file.to_csv (r'c:\Users\User\Documents\mintak\jupiter\kl\telepules_ki.csv', index = None, header=True) print('kiírás kész') # In[ ]: ## koplett windows -os alkalmazás xls -> konverzióra import tkinter as tk from tkinter import filedialog from tkinter import messagebox import pandas as pd root= tk.Tk() canvas1 = tk.Canvas(root, width = 300, height = 300, bg = 'lightsteelblue2', relief = 'raised') canvas1.pack() label1 = tk.Label(root, text='File Conversion Tool', bg = 'lightsteelblue2') label1.config(font=('helvetica', 20)) canvas1.create_window(150, 60, window=label1) def getExcel (): global read_file import_file_path = filedialog.askopenfilename() read_file = pd.read_excel (import_file_path) browseButton_Excel = tk.Button(text=" Import Excel File ", command=getExcel, bg='green', fg='white', font=('helvetica', 12, 'bold')) canvas1.create_window(150, 130, window=browseButton_Excel) def convertToCSV (): global read_file export_file_path = filedialog.asksaveasfilename(defaultextension='.csv') read_file.to_csv (export_file_path, index = None, header=True) saveAsButton_CSV = tk.Button(text='Convert Excel to CSV', command=convertToCSV, bg='green', fg='white', font=('helvetica', 12, 'bold')) canvas1.create_window(150, 180, window=saveAsButton_CSV) def exitApplication(): MsgBox = tk.messagebox.askquestion ('Exit Application','Are you sure you want to exit the application',icon = 'warning') if MsgBox == 'yes': root.destroy() exitButton = tk.Button (root, text=' Exit Application ',command=exitApplication, bg='brown', fg='white', font=('helvetica', 12, 'bold')) canvas1.create_window(150, 230, window=exitButton) root.mainloop() # In[ ]: import openpyxl wb = openpyxl.load_workbook(r'c:\Users\User\Documents\mintak\jupiter\kl\telepules.xlsx') sheet = wb.active sheet['C5'] = 42 mezo ='C2' sheet[mezo] = 'C2' for i in range(20): mezo_iro = 'A' + str(i+1) sheet[mezo_iro] = i+1 wb.save(r'c:\Users\User\Documents\mintak\jupiter\kl\telepules_m2.xlsx') print('kiírás kész') # In[ ]: # letiltása a autoanswer párbeszédablak a makrókat import win32com.client as win32 import os parent_dir = r'c:\Users\User\Documents\mintak\jupiter\kl' input_files = os.listdir(parent_dir) print(input_files) input_files = [parent_dir +'\\'+ i for i in input_files if i.endswith('.xls') or i.endswith('.xlsx')] print(input_files) for input_file in input_files: if not os.path.isfile(input_file.replace('.xls', '.xlsx')): excel = win32.gencache.EnsureDispatch('Excel.Application') wb = excel.Workbooks.Open(input_file) wb.SaveAs(input_file +'x2', FileFormat=51) # FileFormat = 51 is for .xlsx extension print('excel :', input_file) wb.Close() # FileFormat = 56 is for .xls extension excel.Application.Quit() print('Módosítás kész') # In[ ]: