2010-10-31 2 views
5

Я новичок в том, что python использовал его для графики, но никогда не делал этого для других проблем. Мой вопрос заключается в том, как прочитать этот файл, который является разделителем табуляции или пробела, и имеет заголовки в python, я знаю, как сделать файл с разделителями-запятыми, но не сделал этого?чтение файла в 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 

Также существует способ найти разницу между количеством дней между двумя датами.

ответ

4

Для простых задач вы можете просто использовать метод str.split(). split() принимает разделитель как свой параметр, но разбивается на пробелы, если ни один не задан.

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

Не работает ли такая же технология для модулей csv?

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

Разделитель может быть "\ s" или "\ т".

Вы также можете использовать DictReader таким образом:

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

вы также можете использовать грубую Техника силу

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

Split функции:

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

Для расчета количества дней, использовать модуль даты и времени: http://docs.python.org/library/datetime.html

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

поэтому, если я использую csv reader, как получить доступ к каждому элементу каждой строки из входного файла. – user458858

+0

использует csv.DictReader, а строка заголовка будет использоваться для чтения ключей для каждого соответствующего значения в следующих строках, а затем каждая строка вернет dict с значениями строки в качестве значений dict. – PaulMcG

+0

Отлично, никогда не знал, что я могу использовать csv с файлами, отличными от csv. Но использование разделителя = "\ s" не работает. – sykora

Смежные вопросы