2017-09-17 33 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()]