2016-03-31 29 views
2

benBaskı hat numaraları

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 

daha yeniden düşündüm

... Bu

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) 

Sadece 1200 yazdırır denedi Ama

var
File "a7.py", line 12, in <module> 
    if num in p.findall(line) : 
TypeError: expected string or buffer 

İstediğim şey th 1200.File içeren tüm satır numaralarının tek bir satırda sayısal girişleri var, bunu kontrol ettim.

+1

Ben o zaman int geri şamandıra değerlerinin üzerinde map, float map neden –

+0

dosya baskını gibi sayısal girişler içeriyor mu ... karıştı ve Onları yuvarlaklaştırmak/onları tamsayılara kesmek mi istiyorsunuz? –

+0

@JacobRitchie Evet, yüzer, tam sayılara dönüştürülmelidir. –

cevap

2

Önerilen çözümünüzün olabildiğince yakın olarak kalması, seçtiğiniz num'u içeren tüm satırların satır numaralarını yazdıracaktır.

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 

Düzenleme

Ancak, kod sadece dosyadaki yüzen keser - bu onları doğru yuvarlamak olmayacaktır. 1200.9, örneğin 1201 yerine 1200 olur. Durumunuzda bu bir sorun olmazsa, sorun yoktur. Sadece satır numaralarını yazdırmak isterseniz Ancak genel olarak bu

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

böyle bir şey için

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

işlev çağrısını değiştirmek için daha iyi olurdu, o zaman sizi hizaya kaydını tutabilir gerekir açık. Ayrıca, bu kod dosyanın tüm içeriğini bir kerede belleğe okumaz. (Büyük dosyalar için kullanışlıdır).

num = 1200 

line_num = 0 
with open('base.txt','r') as f: 
    line_num += 1 
    for line in f: 
     if int(line) == num: 
      print line_num 
2

Sen enumerate() kullanabilirsiniz:

with open('base.txt', 'r') as f: 
    for i, line in enumerate(f): 
     if num == int(line): 
      print i