Python 打印包含特定整数的行的行号

Python 打印包含特定整数的行的行号,python,regex,Python,Regex,我试过这个 import itertools import numpy as np with open('base.txt','r') as f: lst = map(int, itertools.imap(float, f)) num=1200 for line in lst: if num == line: print (line) 刚印了1200张 我想到了雷比 import re import itertools with open('base.

我试过这个

import itertools
import numpy as np

with open('base.txt','r') as f:
    lst = map(int, itertools.imap(float, f))

num=1200

for line in lst:
    if num == line:
        print (line)
刚印了1200张

我想到了雷比

import re
import itertools

with open('base.txt','r') as f:
    lst = map(int, itertools.imap(float, f))

p = re.compile(r'(\d+)')

num=1200

for line in lst:
    if num in p.findall(line):
        print line
但是我有

  File "a7.py", line 12, in <module>
    if num in p.findall(line) :
TypeError: expected string or buffer
文件“a7.py”,第12行,在
如果p.findall中的num(第行):
TypeError:应为字符串或缓冲区

我想要的是包含1200的所有行号。文件有一行一行的数字输入,我已对此进行了检查。

尽可能靠近您建议的解决方案,这应该打印出包含您选择的
num
的所有行的行号

import itertools
with open('base.txt','r') as f:
    lst = map(int, itertools.imap(float, f))

num=1200

line_number = 1
for line in lst:
    if num == line:
        print (line_number)
    line_number += 1
编辑

然而,您的代码只是截断了文件中的浮动-它不会正确地对它们进行舍入<例如,代码>1200.9变为
1200
,而不是
1201

如果这对你来说不是问题,那就好了。然而,一般来说,最好改变你的想法

lst = map(int, itertools.imap(float, f))
函数调用类似

lst = map(int,map(round, itertools.imap(float, f)))

尽可能靠近建议的解决方案,这应该打印出包含所选
num
的所有行的行号

import itertools
with open('base.txt','r') as f:
    lst = map(int, itertools.imap(float, f))

num=1200

line_number = 1
for line in lst:
    if num == line:
        print (line_number)
    line_number += 1
编辑

然而,您的代码只是截断了文件中的浮动-它不会正确地对它们进行舍入<例如,代码>1200.9变为
1200
,而不是
1201

如果这对你来说不是问题,那就好了。然而,一般来说,最好改变你的想法

lst = map(int, itertools.imap(float, f))
函数调用类似

lst = map(int,map(round, itertools.imap(float, f)))

如果你只想打印行号,那么你需要跟踪你在哪一行

此外,此代码不会立即将文件的全部内容读入内存。(适用于大文件)


如果你只想打印行号,那么你需要跟踪你在哪一行

此外,此代码不会立即将文件的全部内容读入内存。(适用于大文件)


您可以使用
枚举()


您可以使用
枚举()


我不明白为什么要映射浮点,然后将int映射回浮点值…文件是否包含作为浮点的数字输入,并且要将它们舍入/截断为整数?@JacobRitchie是的,有浮点,需要转换为整数。那么,您转换为整数的方式可能不正确。int()函数只是丢弃小数,它不能正确地进行四舍五入。您需要使用round()函数来实现这一点。@JacobRitchie否,因为值是1.200000e+03我不明白为什么要映射float,然后将int映射回float值……文件是否包含作为float的数字输入,并且您想将其舍入/截断为整数?@JacobRitchie是的,有float,需要转换为整数。那么,您转换为整数的方式可能不正确。int()函数只是丢弃小数,它不能正确地进行四舍五入。您需要使用round()函数来实现它。@JacobRitchie否,因为值是1.200000e+03