2013-08-19 5 views
0

Когда я определяю функцию, она не возвращает значение. Тем не менее, я проверял код функции только в IDLE, и он работает. В чем проблема? Файл действительно содержит значение, которое я хочу получить. Когда я использую отладчик, пошаговую эту функцию, он перескакивает из «для строки в читателе:» непосредственно до конца. Где моя проблема? Мой код:Функция не возвращает значение

import re,csv 

F=open('file.csv') 

# `......` 

def prog_rownum(Ref,s): 

    P=[] 
    reader=csv.reader(s) 
    for row in reader: 
     m=re.match(Ref,','.join(row)) 
     if m: 
      P.append(reader.line_num) 
    return P 
# `......` 

P1=prog_rownum('U16',F) 

# `......` 

Данные (colnum AC) в файле таким образом, извините за неспецифической информации:

InstPin  Netlist RefDes 

U16:0:NMI  0 U16 

U16:0:O\E\  0 U16 

U16:0:R\S\T\ 0 U16 

U16:0:REF_FREQ 0 U16 

U16:0:REFCLK_C 0 U16 

U16:0:REFCLK_N 0 U16 

U16:0:REFCLK_P 0 U16 

U16:0:RX_N0  0 U16 

U16:0:RX_N1  0 U16 

U16:0:RX_N10 0 U16 

U16:0:RX_N11 0 U16 

U16:0:RX_N12 0 U16 

U16:0:RX_N13 0 U16 

Я просто хочу, чтобы вернуть необходимый ROWNUM, который содержит информацию, что мне нужно ,

+7

Как сделать вы знаете, что он не возвращает никакой ценности? Дайте нам то, что мы можем воспроизвести, как минимум, включив образцы данных, которые обнаруживают проблему. – agf

+0

Вы попробовали: 'print P1' –

+0

Вы уверены, что ваши отрывки верны? Особенно нет смеси вкладок и пробелов? (Если обратная линия имеет другой отступ для остальных, это может быть не связано с правильным блоком) – Randomness

ответ

1

Трудно сказать, без получения более подробной информации, но следующий делает то же самое, как ваша функция и чище, может быть, это решает проблему:

def prog_rownum(filename, ref): 
    """ Return a list with the line numbers where ref appears in filename """ 
    with open(filename) as f: 
     return [line_num for line_num, line in enumerate(f) 
       if line.startswith(ref)] # alternatively "if ref in line" checks anywhere 

проверить его с

>>> print prog_rownum('file.csv', 'U16') 
[2, 5, 7] 
+0

Вы передаете переменную 'filename ', которую вы не используете, и я не считаю, что ваши выходные списки в Python выглядят как' [2, 5, 7] ', а не' [2, 5, 7] '. – DSM

+0

@DSM, исправлено, выход был составлен, потому что в этот момент OP не предоставил тестовый файл. – elyase

+0

@elyase, извините, в моем коде s обозначает открытый файл, что означает s в вашем функциональном коде? – smallsu

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