2017-09-17 18 views
0

"all_years.txt"というファイル全体を読みたい(年/文字/単語でいっぱい)を1行ずつ計算し、1年がうるう年かどうかを計算します。もしそうなら、私はその行を "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() 

このコードは、実際には、他の空のファイルへの最初のファイルとプリントを読んでいますが、「all_years.txt」ファイルの最後の行である、それだけでプリント「6464」。なぜ最後のファイルしか印刷されないのですか?

ファイル内のすべての文字を無視することになっています。 これは、最後の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が真です。スペースと行末は数字ではありません。また、元のファイルを1行ずつ読み込んでいるわけでもありませんが、ファイルが大きくならない限り、おそらくそれほど重要ではありません。 – pvg

答えて

1

すべての改行が含まれている最後の行を除いて、そうisdigitはfalseを返します。文字列にstripを使用して、末尾の空白を削除します。私はテキストの間のすべてのスペースは、ファイルの新しいラインです...だから、それは基本的にあなたが見るものの縦バージョンだと言うべき

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

関連する問題