Bir dosyayı okuyan ve dosyanın ilk satırı boş değilse sonraki dört satırı okuyan bir program oluşturuyorum. Bu satırlar üzerinde hesaplamalar yapılıyor ve ardından bir sonraki satır okunuyor. Eğer o satır boş değilse devam ediyor. Ancak, bu hatayı alıyorum:
ValueError: int() için 10 tabanında geçersiz değişmez: ''.
İlk satırı okuyor ancak bir tamsayıya dönüştüremiyor.
Bu sorunu çözmek için ne yapabilirim?
Kod:
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())
Bir dosya üzerinde yinelemenin ve int'e dönüştürmenin Pythonik yolu:
for line in open(fname):
if line.strip(): # line contains eol character(s)
n = int(line) # assuming single integer on each line
Yapmaya çalıştığınız şey biraz daha karmaşık, ancak yine de basit değil:
h = open(fname)
for line in h:
if line.strip():
[int(next(h).strip()) for _ in range(4)] # list of integers
Bu şekilde her seferinde 5 satır işler. Python 2.6'dan önce next(h)
yerine h.next()
kullanın.
ValueErrorile karşılaşmanızın nedeni
int`nin boş bir dizeyi tamsayıya dönüştürememesidir. Bu durumda, ya dönüştürmeden önce dizenin içeriğini kontrol etmeniz ya da bir hata almanız gerekir:
try:
int('')
except ValueError:
pass # or whatever
readings = (infile.readline())
print readings
while readings != 0:
global count
readings = int(readings)
Bu kodla ilgili bir sorun var. readings` dosyadan okunan yeni bir satırdır - bir dizedir. Bu nedenle onu 0 ile karşılaştırmamalısınız. Ayrıca, onun gerçekten bir tamsayı olduğundan *emin olmadığınız sürece onu bir tamsayıya dönüştüremezsiniz. Örneğin, boş satırlar burada hata üretecektir (kesinlikle öğrendiğiniz gibi).
Peki neden küresel sayıma ihtiyacınız var? Bu kesinlikle Python'da kötü bir tasarımdır.
Bir program oluşturuyorum ve bu program dosyası ve eğer dosyanın ilk satırı boş değilse, sonraki dördü okur çizgiler. Hesaplamalar aşağıdakiler üzerinde gerçekleştirilir bu satırlar ve ardından bir sonraki satır okuyun.
Bunun gibi bir şey işe yaramalı:
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