当我定义一个函数时,它不返回任何值。但是,我已经在IDLE中单独验证了该函数的代码,并且它可以工作。问题出在哪儿?该文件真正包含我想要获得的值。当我使用调试器时,执行此函数,它会从'for reader in reader:'直接跳到最后。我的问题在哪里?我的代码:
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 A-C)就是这样,对于非特定信息感到抱歉:
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,其中包含我需要的信息。
答案 0 :(得分: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]