2010-10-31 19 views
5

Soy nuevo en python estado usándolo para gráficos pero nunca lo hice por otros problemas. Mi pregunta es cómo leer este archivo que está delimitado por tabuladores o espacios y tiene encabezados en Python, sé cómo hacer un archivo delimitado por comas pero no lo he hecho.leyendo un archivo en python

ID YR MO DA YrM MoM DaM 
100 2010 2 20 2010 8 2010 30 
110 2010 4 30 2010 9 2010 12  
112 2010 8 20 2010 10 2010 20 

También hay una manera de encontrar la diferencia de número de días entre dos fechas.

Respuesta

4

Para tareas simples, puede simplemente usar el método str.split(). split() toma el delimitador como su parámetro, pero se divide en espacios en blanco si no se proporciona ninguno.

>>> lin="a b c d" 
>>> lin.split() 
['a', 'b', 'c', 'd'] 
17

¿No funciona la misma técnica para los módulos csv?

import csv 
reader = csv.reader(open("filename"), delimiter="\t") 

delimitador puede ser "\ s" o "\ t".

También puede utilizar DictReader esta manera:

f = open(filename, '') 
try: 
    reader = csv.DictReader(f) 
    for row in reader: 
     print row 
finally: 
    f.close() 

también se puede utilizar la técnica de fuerza bruta

for line in open(filename): 
    listWords = line.split("\t") 

función Split:

>>> t = 'ID YR MO DA YrM MoM DaM' 
>>> t.split(" ") 
['ID', 'YR', 'MO', 'DA', 'YrM', 'MoM', 'DaM'] 

Para calcular ninguna de días, utilizar el módulo de fecha y hora: http://docs.python.org/library/datetime.html

>>> import datetime 
>>> k = datetime.date(2010, 05, 26) - datetime.date(2010, 02, 10) 
>>> k.days 
105 
>>> 
+0

así que si uso el lector csv ¿cómo puedo acceder a cada elemento de cada fila desde el archivo de entrada. – user458858

+0

use un csv.DictReader y la fila del encabezado se usará para leer las claves de cada valor respectivo en las filas siguientes, y luego cada fila devolverá un dict con los valores de la fila como los valores del dict de la fila. – PaulMcG

+0

Genial, nunca supe que podría usar csv con archivos que no sean csv. Pero el uso de delimiter = "\ s" no parece funcionar. – sykora

Cuestiones relacionadas