ファイルを読み込んで、そのファイルの最初の行が空白でなければ、次の4行を読み込むプログラムを作成しています。 それらの行で計算が行われ、次の行が読み込まれます。 その行が空でなければ続けて読みます。 しかし、次のようなエラーが出てしまいます。
ValueError: invalid literal for int() with base 10: ''.`.
1行目は読み込んでいるのですが、それを整数に変換できません。
この問題を解決するにはどうしたらいいですか?
コードを見てみると
file_to_read = raw_input("Enter file name of tests (empty string to end program):")
try:
infile = open(file_to_read, 'r')
while file_to_read != " ":
file_to_write = raw_input("Enter output file name (.csv will be appended to it):")
file_to_write = file_to_write + ".csv"
outfile = open(file_to_write, "w")
readings = (infile.readline())
print readings
while readings != 0:
global count
readings = int(readings)
minimum = (infile.readline())
maximum = (infile.readline())
ファイルを反復処理してintに変換するPythonicな方法。
for line in open(fname):
if line.strip(): # line contains eol character(s)
n = int(line) # assuming single integer on each line
あなたがやろうとしていることは少し複雑ですが、それでも簡単ではありません。
h = open(fname)
for line in h:
if line.strip():
[int(next(h).strip()) for _ in range(4)] # list of integers
この方法では一度に5行を処理します。Python 2.6 以前では next(h)
の代わりに h.next()
を使用してください。
ValueErrorが発生したのは、
int`が空の文字列を整数に変換できないからです。この場合、変換前に文字列の内容を確認するか、エラーを除外する必要があります。
try:
int('')
except ValueError:
pass # or whatever
readings = (infile.readline())
print readings
while readings != 0:
global count
readings = int(readings)
このコードには問題があります。readings`はファイルから読み込まれた新しい行であり、文字列です。さらに、それが本当に整数であると確信できない限り、単に整数に変換することはできません。例えば、空の行はここではエラーになります(あなたもお気づきでしょうが)。
また、なぜグローバルカウントが必要なのでしょうか?これはPythonの設計上の問題です。
プログラムを作成しています。 ファイルを読み込んで、そのファイルの最初の行が空白でなければ ファイルの最初の行が空白でなければ、次の4行を読みます。 行を読み込みます。計算はこれらの行で行われ それらの行で計算が行われ、次の行が 読み込みます。
こんな感じで動くはずです。
for line in infile:
next_lines = []
if line.strip():
for i in xrange(4):
try:
next_lines.append(infile.next())
except StopIteration:
break
# Do your calculation with "4 lines" here