<jupyter_start><jupyter_text>El módulo os: acceso al sistema operativo  El módulo os.pathEste submódulo está pensado para realizar operaciones con el sistema de archivosque sean multiplataforma. Por ejemplo, define la variable `os.path.sep` que será el caracter usado a nivel del sistema operativo para separar las rutas o `paths`. Según la plataforma sobre la que estemos ejecutando Python, valdra un caracter yu otro; en windows esrá la barra imnvertida '\', en linux/unix/mac se usa la barra normañ: `/`.<jupyter_code>import os 
os.path.sep<jupyter_output><empty_output><jupyter_text>Podemos crear una ruta de directorio a partir de los nombres de las carpetas y el fichero final, usando la función `os.path.join`:<jupyter_code>os.path.join('one', 'two', 'three.txt')<jupyter_output><empty_output><jupyter_text>la  función `os.path.split` divide una ruta en dos partes; la segunda es el último comoponente de la ruta, y la primnera es todo lo que viene antes:<jupyter_code>os.path.split('one/two/trhee.txt')<jupyter_output><empty_output><jupyter_text>Si solo nos interesa la segunda parte, podemos usar `os.path.basename`:<jupyter_code>os.path.basename('one/two/trhee.txt')<jupyter_output><empty_output><jupyter_text>Y si solo nos interesa la primera, usamos `os.path.dirname`:<jupyter_code>os.path.dirname('one/two/trhee.txt')<jupyter_output><empty_output><jupyter_text>Si lo que nos interesa es la extensión de nombre del archivo, existe `os.path.splitext`:<jupyter_code>os.path.splitext('one/two/trhee.txt')<jupyter_output><empty_output><jupyter_text>Marcas temporales y otros datos asociadas a los ficherosLa función `os.path.getsize()` nos devuelve el tamaño, en bytes, que ocupa un archivo.Hay funciones que nos permiten saber cuando se creó un archivo (`os.path.getctime`), cuando fue leido por última vez (`os.path.getatime`)y cuando fue modificado por última vez (`os.path.getctime`).Todas estas funciones devuelve este tiempo en un formato conocido como [**Tiempo Unix**, **Unix epoch** o **Tiempo POSIX**](https://es.wikipedia.org/wiki/Tiempo_Unix), que es el número de segundos que han pasado desde la medianoche UTC del 1 de enero de 1970. Podemos pasar de este dato, un tanto incómodo, en un tipo de datos llamado `datetime`, mucho más cómodo:podemos definir una función para realizar esta conversión, que le pasemos un enoch y nos devuelva una cadena de texto más agradable para nosotros:<jupyter_code>def to_date(f):
    dt = datetime.datetime.fromtimestamp(f)
    return dt.strftime('%A, %d de %m de %Y, a las %H:%M:%S')<jupyter_output><empty_output><jupyter_text>Este fichero se llama `os.ipynb`, vamos a obtener toda la información anterior:<jupyter_code>import os
import datetime

filename = 'os.ipynb'
print('Tamaño (bytes):', os.path.getsize(filename))
print('Creado el:', to_date(os.path.getctime(filename)))
print('Accedido por última vez el:', to_date(os.path.getatime(filename)))
print('Modificado por última ve el:', to_date(os.path.getmtime(filename)))<jupyter_output>Tamaño (bytes): 151283
Creado el: Friday, 13 de 04 de 2018, a las 14:30:34
Accedido por última vez el: Friday, 13 de 04 de 2018, a las 14:30:34
Modificado por última ve el: Friday, 13 de 04 de 2018, a las 14:30:34<jupyter_text>También podemos comprobar si un fichero existe (o no) con las llamada`os.path.exists`, y también podemos determinar si una ruta determinadaes un archivo o un directorio con `isfile` e `isdir`.La función `os.listdir` nos devuelve una lista de ficheros dentro de un directorio. Podemos especificar ell directorio actual con el caracter `.`. Vamos a hacer un programa que liste los archivos. indicando con una D si son directorios, y ademas pondremos el tamaño en el caso de que sean archivos:<jupyter_code>for fn in sorted(os.listdir('.')):
    if os.path.isdir(fn):
        print('D  ', end='')
    else:
        print('   ', end='')
    print(fn, end=' ')
    if os.path.isfile(fn):
        tam = os.path.getsize(fn)
        if tam < 1024:
            print(tam, 'bytes', end='')
        else:
            print(tam//1024, 'Kb', end='')
    print()<jupyter_output>D  .cache 
D  .git 
   .gitignore 178 bytes
D  .ipynb_checkpoints 
   .travis.yml 80 bytes
   001_numeros.ipynb 5 Kb
   002_variables.ipynb 5 Kb
   003_listas.ipynb 10 Kb
   004_matplot.ipynb 73 Kb
   005_bucles.ipynb 12 Kb
   006_strings.ipynb 21 Kb
   007_if.ipynb 9 Kb
   008_booleans.ipynb 6 Kb
   009_while.ipynb 22 Kb
   010_ficheros.ipynb 19 Kb
   012_matplotlib.ipynb 242 Kb
   013_pandas.ipynb 190 Kb
   50_mymagic.py 1 Kb
   CONTRIBUTING.md 1 Kb
   Ejemplos.ipynb 3 Kb
   Gruntfile.js 3 Kb
   Intro.ipynb 1 Kb
   Introduccion-a-jupyter.ipynb 13 Kb
   LICENSE 1 Kb
   Primeros-pasos.ipynb 23 Kb
   README.md 46 Kb
   Sorteo.ipynb 3 Kb
   Untitled.ipynb 567 bytes
   Untitled1.ipynb 2 Kb
   Untitled2.ipynb 1 Kb
   Voronoi.ipynb 3 Kb
D  __pycache__ 
D  art 
   beatbox.py 101 bytes
   bower.json 523 bytes
   cesar.py 985 bytes
   coords.py 3 Kb
   cortinilla-v.py 1 Kb
   count_words.ipynb 1 Kb
D  css 
   custom_magics.md 3 Kb
D  data 
   demo.html 15 Kb
   estatutos.py 995 bytes
   hide_m[...]<jupyter_text>Recorrer un arbol de directorio con os.path.walk Existe una función en el módulo `os` que nos permite recorrer muy facilmente todo en arbol de directorios. La función se llama `os.walk`, acepta como parámetro de entrada un directorio y funciona devolviendo, por cada carpeta que encuentre, una tupla de tres elementos:1) La ruta de la carpeta2) La lista de las subcapretas que contienen3) La lista de ficheros que contien Por ejemplo, el siguiente listado recorre todas las carpetas buscando ficheros con la extensión '.pdf' y nos informa de cuantos ha encontrado:<jupyter_code>count = 0
for (dir_name, dirs, filenames) in os.walk('../..'):
    for fn in filenames:
        if fn.lower().endswith('.pdf'):
            count = count + 1
print('Tienes {} fiehcos de tipo PDF en tu disco duro'.format(count))<jupyter_output>Tienes 5692 fiehcos de tipo PDF en tu disco duro<jupyter_text>Como usar los diccionarios tipo Counter<jupyter_code>from collections import Counter

c = Counter('<NAME>')
print(c)
c = Counter(['pdf', 'gif', 'gif', 'jpg', 'txt'])
print(c)
c.update(['pdf', 'pdf', 'pdf'])
print(c)
## Buscar tipos de archivos por extension
from collections import Counter

def get_ext(fn):
    _, ext = os.path.splitext(fn)
    return ext.lower()

count = Counter()
for (dir_name, dirs, filenames) in os.walk('..'):
    count.update([get_ext(f) for f in filenames])
print(count.items())
%matplotlib inline
import matplotlib.pyplot as plt

data = {k: count[k] for k in count if count[k] > 100}
plt.figure(figsize=(15, 12))
plt.barh(list(data.keys()), list(data.values()))<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.10014903129657228, 'fraction_numerical': 0.026974664679582712, 'mean_word_length': 4.394694533762058, 'pattern_counts': {'":': 0, '<': 44, '<?xml version=': 0, '>': 44, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '11', 'dir': 'jupyter-structured-clean-dedup', 'id': '61157', 'license': 'MIT', 'n_tokens_mistral': 2646, 'n_tokens_neox': 2478, 'n_words': 787, 'path': 'os.ipynb', 'repo_name': 'euribates/Jupyter-Intro', 'size': '6723'}