У меня есть текстовый файл, который я хотел бы ввести построчно в python. Мой текстовый файл с разделителями табуляции:
0.227996254681648 0.337028824833703 0.238163571416268 0.183009231781289 0.085746697332588 0.13412895376826
0.247891283973758 0.335555555555556 0.272129379268419 0.187328622765857 0.085921240923626 0.128372465534807
0.264761012183693 0.337777777777778 0.245917821271498 0.183211905363232 0.080493183753814 0.122786059549795
0.30506091846298 0.337777777777778 0.204265153911403 0.208453197418743 0.0715575291087 0.083682658454807
0.222748815165877 0.337028824833703 0.209714942778068 0.084252659537679 0.142013573559938 0.234672985858848
Я хотел бы читать в каждой строке, а затем печатать только 6-й столбец. Это работает довольно хорошо с этим кодом:
with open('path/mytextfile.txt') as f:
for line in f:
header1 = f.readline()
line = line.strip()
columns = line.split()
jmag = columns[5]
print(jmag)
if 'str' in line:
break
Он печатает 6-й столбец, который я хочу, но печатает только каждую вторую строку:
0.13412895376826
0.122786059549795
0.234672985858848
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-63-98c7449902b9> in <module>
4 line = line.strip()
5 columns = line.split()
----> 6 jmag = columns[5]
7 print(jmag)
8 if 'str' in line:
IndexError: list index out of range
В чем здесь ошибка?
И for line in f
, и f.readline()
перемещают указатель файла; вы, вероятно, хотели прочитать «заголовок» вне цикла (если вообще в вашем примере нет заголовка).
ты не можешь сделать что-то вроде
f = open("file.txt")
lines = readlines(f)
for line in lines:
print(line.split()[5])
f.close()
это должно взять каждую строку и разделить их на 6 разных чисел, а затем напечатать 5-е число в списке (которое является шестым числом)
readlines(f)
действительно работает? Из всех примеров, которые я знаю, это всегда f.readlines()
Извините, это опечатка, это f.readlines()
Проблема с вашим кодом в том, что вы делаете for line in f:
, но также и header1 = f.readline()
. for line in f:
проходит через каждую строку, но header1 = f.readline()
удаляет следующую строку (и сохраняет ее в header1
). Все, что вам нужно сделать, это удалить header1 = f.readline()
.
Вы также можете быть немного менее многословным в коде, выполнив
with open("path/mytextfile.txt") as f:
for line in f:
columns = line.strip().split()
if 'str' in line:
break
print(columns[5])
но это не имеет большого значения.
Я считаю, что ошибка индекса происходит потому, что for line in f:
узнает, сколько итераций ему нужно пройти, но f
меняет размер. Как правило, изменять размер list
или файла во время просмотра — плохая идея.
в вашем цикле вы звоните
f.readline()
- таким образом пропуская каждую вторую строку