"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
:あなたはリスト内包と一つの場所にそれをすべて行うことができます。 – forumer444
'line.strip()。isdigit()'を使用して行の中のブレークライン '\ n'またはスペースを削除します。これはおそらく問題です – kip
文字列中のすべての文字が数字である場合にのみisdigitが真です。スペースと行末は数字ではありません。また、元のファイルを1行ずつ読み込んでいるわけでもありませんが、ファイルが大きくならない限り、おそらくそれほど重要ではありません。 – pvg