2017-09-17 32 views
0

我想讀取整個文件「all_years.txt」。 (全年/字母/單詞),逐行,並計算一年是閏年。如果是這樣,我想將該行寫入一個名爲「leap_years.txt」的空文件中。我的循環中有錯誤嗎?

# calculation function 
def leapYear(year): 
    """ Calculates whether a year is or isn't a leap year. """ 
    year = int(year) 
    return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0) 

# main function 
def main(): 
    try: 
     file_1 = open("all_years.txt", "r") # open file 
     lines = file_1.readlines() 
     file_1.close() 

     file_2 = open("leap_years.txt", "a") # open file 

     for line in lines: 
      if line.isdigit(): 
       if leapYear(line): 
        file_2.write(line) 
     file_2.close() 
    except ValueError as e: 
     print(e) 
main() 

此代碼其實,讀的第一個文件,並打印到其他空文件,但只打印出「6464」,這是對「all_years.txt」文件的最後一行。爲什麼只坐着打印最後一個文件?

它應該忽略文件中的所有字母。 這是最後20行左右看的「all_years.txt」文件的內容:

Lemming 
2500 
xyzw 
2100 
2101 
2102 
love 
hate 
3232 
2054 
2.71828 
6504 
6500 
4242 
1522 
0.68 
3333 
666 
325 
1066 
6464 
+0

我應該說,文本之間的每一個空間上的文件一個新行......所以基本上你所看到的豎版。 – forumer444

+0

使用'line.strip()。isdigit()'刪除行中的分隔符\ n或空格,可能是這個問題 – kip

+0

因爲只有字符串中的所有字符都是數字,isdigit才爲真。空格和行結尾不是數字。你也沒有真正的逐行閱讀原始文件,但這可能並不重要,除非文件變大。 – pvg

回答

1

你的所有線路除了最後一行包含換行符,所以isdigit返回false。在字符串上使用strip可刪除兩端的空白。你可以用一個列表理解做這一切在一個地方:

lines = [line.strip() for line in file_1.readlines()]