-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathlc.py
135 lines (115 loc) · 3.83 KB
/
lc.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
import csv
import json
import os
import time
# Variables
# carpeta = "/home/rctorr/CursoPython/Sesion-03"
carpeta = "." # Carpeta actual
def obtener_elementos(carpeta):
"""
Obtiene los elementos de la carpeta y regresa en forma de
lista
"""
# Obtener la lista de elemento de un carpeta
try:
nombres = os.listdir(carpeta)
except PermissionError:
return [], 0
# Agregando carpeta a la lista de nombres
for i, nom in enumerate(nombres):
nombres[i] = os.path.join(carpeta, nom)
# Agregar los datos adicionales a cada elemento
elementos = []
total = 0
for nom in nombres:
if os.path.isfile(nom): # si es un archivo?
tam = os.path.getsize(nom)
else: # es una carpeta
tam = 0
# Obtener la fecha
try:
fecha = os.path.getmtime(nom)
fecha = time.ctime(fecha)
except FileNotFoundError:
fecha = ""
except PermissionError:
fecha = ""
elemento = [nom, tam, fecha]
elementos.append(elemento)
# si es una carpeta, entonces obtenemos sus elementos
if os.path.isdir(nom): # Si nom es una carpeta?
sub_elementos = obtener_elementos(nom)
elementos += sub_elementos
tam = sub_elementos[-1][1]
# sumar el tam a total para cada elemento
total += tam # total = total + tam
# Para hacer depuraci´on pusada
# print(elementos)
# input("Presiona ENTER")
# Agregando un elemento auxiliar para el total
elemento = ["Total:", total, "bytes"]
elementos.append(elemento)
return elementos
def imprimir_elementos(elementos):
"""
Imprime la lista de elementos en formato texto en la salida
estándar.
"""
# Imprimir la lista
print("-" * 80)
for e in elementos: # e = ["nom", 1234, "fecha"]
# print("{} {}".format(e[0], e[1])
if os.path.isdir(e[0]): # e = ["nom/", 1234, "fecha"]
e[0] += "/" # e[0] = e[0] + "/"
print("{:40}|{:10}|{:15}".format(*e))
print("-" * 80)
def guardar_elementos(elementos):
"""
Guarda la lista de elementos en el archivo salida.txt.
"""
archivo = "salida.txt"
da = open(archivo, "w")
# Imprimir la lista
da.write("-" * 80 + "\n")
for e in elementos: # e = ["nom", 1234, "fecha"]
# print("{} {}".format(e[0], e[1])
if os.path.isdir(e[0]): # e = ["nom/", 1234, "fecha"]
e[0] += "/" # e[0] = e[0] + "/"
print("{:60}|{:10}|{:15}".format(*e), file=da)
print("-" * 80, file=da)
da.close()
def guardar_elementos_csv(elementos):
"""
Guarda la lista de elementos en el archivo salida.csv.
"""
archivo = "salida.csv"
with open(archivo, "w") as da:
# Crear un descript de archivo en csv
da_csv = csv.writer(da)
# Guarda el encabezado
enc = ["Nombre", "Tamaño", "Fecha"]
da_csv.writerow(enc)
# Guardar la lista
for e in elementos: # e = ["nom", 1234, "fecha"]
# print("{} {}".format(e[0], e[1])
if os.path.isdir(e[0]): # e = ["nom/", 1234, "fecha"]
e[0] += "/" # e[0] = e[0] + "/"
da_csv.writerow(e)
def guardar_elementos_json(elementos):
"""
Guarda la lista de elementos en el archivo salida.json.
"""
archivo = "salida.json"
with open(archivo, "w") as da:
json.dump(elementos, da, indent=4)
def main():
""" Es la función principal del script o módulo """
# Llamando a las funciones
elementos = obtener_elementos(carpeta)
imprimir_elementos(elementos)
guardar_elementos(elementos)
guardar_elementos_csv(elementos)
guardar_elementos_json(elementos)
# Para poder ejecutarlo como módulo
if __name__ == "__main__":
main()