#!/usr/bin/env python
# coding: utf-8
#
#
#
#
#
#
#
#
#
#
#
# # 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[ ]: