Vytváram program, ktorý načíta súbor a ak prvý riadok súboru nie je prázdny, načíta ďalšie štyri riadky. Na týchto riadkoch sa vykonajú výpočty a potom sa načíta ďalší riadok. Ak tento riadok nie je prázdny, pokračuje sa ďalej. Dostávam však túto chybu:
ValueError: invalid literal for int() with base 10: ''.
Prvý riadok prečíta, ale nedokáže ho previesť na celé číslo.
Čo môžem urobiť, aby som tento problém vyriešil?
Kód:
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())
Pytonický spôsob iterácie nad súborom a konverzie na int:
for line in open(fname):
if line.strip(): # line contains eol character(s)
n = int(line) # assuming single integer on each line
To, čo sa snažíte urobiť, je o niečo zložitejšie, ale stále nie je jednoduché:
h = open(fname)
for line in h:
if line.strip():
[int(next(h).strip()) for _ in range(4)] # list of integers
Takto sa spracuje 5 riadkov naraz. Pred verziou Python 2.6 používajte h.next()
namiesto next(h)
.
Dôvod, prečo ste mali ValueError
, je ten, že int
nedokáže previesť prázdny reťazec na celé číslo. V tomto prípade by ste'museli buď skontrolovať obsah reťazca pred konverziou, alebo okrem chyby:
try:
int('')
except ValueError:
pass # or whatever
readings = (infile.readline())
print readings
while readings != 0:
global count
readings = int(readings)
V tomto kóde je problém. readings
je nový riadok načítaný zo súboru - je to reťazec. Preto by ste ho nemali porovnávať s 0. Ďalej ho nemôžete jednoducho previesť na celé číslo, pokiaľ si nie ste istí, že je to naozaj celé číslo. Napríklad prázdne riadky tu spôsobia chyby (ako ste už určite zistili).
A prečo potrebujete globálny počet? To'je určite zlý návrh v Pythone.
Vytváram program, ktorý číta súbor a ak je prvý riadok súboru nie je prázdny, prečíta ďalšie štyri riadky. Výpočty sa vykonávajú na týchto riadkoch a potom sa načíta ďalší riadok prečíta.
Niečo také by malo fungovať:
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