2013-10-01 3 views
1

То, что я пытаюсь выполнить: вытащите последние 8 символов из строк в файле, нарежьте их на два куска символов, сравните их куски с моим словарем и список результатов. Это буквально первое, что я сделал в python, и моя голова крутится со всеми ответами здесь.
Мне кажется, что мне нужны основные инструкции по плаванию, и каждый ответ кажется праймером для бесплатного дайвинга для мировых рекордов.Срез только работает над последней строкой в ​​файле, используя «с открытыми» и «readline»

Я использую следующий код (прямо сейчас у меня есть h1 через h4 комментировал, потому что она не возвращает ключи, которые находятся в моем словаре):

d1 = {'30': 0, '31': 1, '32': 2, '33' : 3, '34': 4, '35': 5, '36': 6, '37': 7, '38': 8, '39': 9, 
    '41': 'A', '42': 'B', '43': 'C', '44': 'D', '45': 'E', '46': 'F'} 



filename = raw_input("Filename? > ") 

with open(filename) as file: 

for line in iter(file.readline, ''): 
    h1 = line[-8:-6] 
    h2 = line[-6:-4] 
    h3 = line[-4:-2] 
    h4 = line[-2:] 


    #h1 = d1[h1] 
    #h2 = d1[h2] 
    #h3 = d1[h3] 
    #h4 = d1[h4] 

    print h1,h2,h3,h4 

Вот часть текстового файла я являюсь используя в качестве входных данных:

naa.60000970000192600748533031453442
naa.60000970000192600748533031453342
naa.60000970000192600748533031453242
naa.60000970000192600748533031453142
naa.60000970000192600748533031434442
naa.60000970000192600748533031434342
naa.60000970000192600748533031434242
naa.60000970000192600748533032363342

Когда я бегу мой сценарий, вот вывод, сгенерированный выше код:

В последней строке выглядит точно так же, как я ожидал бы. Все остальные строки были сдвинуты или сброшены символы. Я в недоумении за это ... Я пробовал много разных способов открыть файл на python, но не смог заставить их зациклиться или имел другие проблемы.

Есть ли простое исправление, которое я просто пропустил здесь? Спасибо, j

ответ

0

Я подозреваю, что все, что вы читаете, имеет возврат каретки в конце, за исключением последнего. Итак, последний правильный, но остальные в основном разделяют последнюю часть строки. IOW, я думаю, что ваши строки файла выглядеть как

>>> open("demo.txt").readline() 
'naa.60000970000192600748533031453442\n' 

где \n является символом возврата каретки, и есть только один символ (это не \ + n).Я мог бы написать что-то вроде кода

with open(filename) as myfile: 
    for line in myfile: 
     line = line.strip() # get rid of leading and trailing whitespace 

     h1 = line[-8:-6] 
     h2 = line[-6:-4] 
     h3 = line[-4:-2] 
     h4 = line[-2:] 

     print h1,h2,h3,h4 

который для меня производит

Filename? > demo.txt 
31 45 34 42 
31 45 33 42 
31 45 32 42 
31 45 31 42 
31 43 44 42 
31 43 43 42 
31 43 42 42 
32 36 33 42 

Мы могли бы упростить h части, но мы оставим это в покое на данный момент. : ^)

+0

Это сработало отлично! Спасибо DSM. Мой выход теперь появляется как это (я положил h1 - 4 назад): Имя файла? > Luns.txt 3 4 A 0 3 4 B 0 ... Одна последняя вещь .... есть простой способ, чтобы удалить пробелы между 4 результатов? В настоящее время я печатаю их с этим утверждением: print h1, h2, h3, h4 Я пробовал h1 + h2 + h3 + h4, но он добавляет номера вверх, а не просто печатает их рядом друг с другом. – FooPlinger

+0

Фактически выяснилось, что сейчас: print «VM ID ----% s VMAX Lun ---»% line, print '% s% s% s% s'% (h1, h2, h3, h4) VM ID ---- naa.60000970000192600748533031453142 VMAX Lun --- 1E1B – FooPlinger