2016-03-25 28 views
-1

Bir metin dosyasından okuyorum ve her satırdaki son öğeyi (rakamı) bulmalıyım. Bu kodun neden düzenli bir dizede denediğim gibi çalışmadığını anlamıyorum, ancak bu durumda geçerli görünmüyor.Bir dosyadaki her satırdaki son öğeyi (basamak) bulma (Python)

f = open("file.txt", "r") 
result = 0 

for line in f: 
    string = str(f.read()) 
    if string[-1:].isdigit() == True: 
     result = int(string[-1:]) 
    else: 
     result = 40 

print(result) 
f.close() 

dosya file.txt sadece

81 First line32 

böylece kod sonucunda 2 yazdırmalısınız satırı içeriyor, ancak ilk koşul doğru olur asla ben sadece 40 olsun. Neyi yanlış yapıyorum?

+0

Baskı sırasında (satır [-1:]) 'f satırındaki satır için ilk satır olarak ne olur? –

+0

Hiçbir şey alamıyorum, ya da muhtemelen "Bir şeyler girmek için Enter tuşuna basınca" bir kaç seviye aşılmış gibi görünüyor. – Riggs

+0

Ne 'Devam etmek için basın'? –

cevap

1

Çok fazla bir f.read() var. Bu tüm ihtiyaç vardır:

f = open("file.txt", "r") 
result = 0 

for line in f: 
    if line[-1:].isdigit(): 
     result = int(line[-1:]) 
    else: 
     result = 40 

print(result) 
f.close() 

Ayrıca if string[-1:].isdigit() == True: Ayrıca line.strip() yeni hatların kurtulmak için, ya da başka karşılaştırma başarısız olur kullanmak isteyebilirsiniz if line[-1:].isdigit(): ile değiştirilebilir.

f = open("file.txt", "r") 
result = 0 

for line in f: 
    l = line.strip() 
    if l[-1:].isdigit(): 
     result = int(l[-1:]) 
    else: 
     result = 40 

print(result) 
f.close() 
+0

için Visual Studio 2015 derleyicisinde teşekkürler. Bunu daha önce de yaptım, ama aslında f.read'e() ihtiyaç duyduğumu düşündüm. Teşekkürler #FacePalm :) – Riggs

4

Bu çizgi gereksiz olduğunu: Eğer dosyadan okumak gerekmez ve aslında sorunların her türlü neden böyle yaparak dosya işaretçisini hareket edecek

string = str(f.read()) 

. Zaten bu ile okuyorsanız:

for line in f: 

Böylece ne istediğinizi geçerli:

for line in f: 
    if line[-1:].isdigit() == True: 
     result = int(line[-1:]) 
    else: 
     result = 40 

Bu explained in the documentation olduğunu.

0

Sorun, satırdaki son karakterin satır sonu karakteri olmasıdır. Kaldırmak için .strip() kullanın (ayrıca fazladan boşlukları da kaldıracak). Eğer tek satırlık bir dosya ile sorunuzu istendiği gibi

with open("file.txt", "r") as f: 
    for line in f: 
    lastchar = line.strip()[-1] 
    if lastchar.isdigit(): 
     result = int(lastchar) 
    else: 
     result = 40   
    print(result) 

Bu 2 yazdırır.

81 First line32 

Ayrıca, her satır için sonucu yazdırmak için birden çok satır için de çalışır.

İlgili konular