@knownamed

Почему не работает split()?

У меня есть задача сделать так, чтобы я мог извлекать столбцы из файла формата:
HETATM 1 H HOH A 1 27.265 36.739 58.126
HETATM 2 H HOH A 1 27.109 35.124 57.944
HETATM 3 O HOH A 1 27.486 35.958 57.542
...
HETATM 9999 O HOH A3333 30.490 83.899 10.929
END


Но, стандартный .split() почему-то не работает и не хочет делить файл по пробелам, работает только с первым столбцом и выдавая ошибку на последующих: IndexError: list index out of range
Код:

water = open('watercube.pdb','r+')
water2 = water.readlines()
for col in water2:
    el = [col.split()[1] for col in water2]
  • Вопрос задан
  • 183 просмотра
Решения вопроса 3
@dmshar
Чего вы хотели добиться, поставив единичку после метода split?
water2=['HETATM 1 H HOH A 1 27.265 36.739 58.126', 
'HETATM 2 H HOH A 1 27.109 35.124 57.944', 
'HETATM 3 O HOH A 1 27.486 35.958 57.542']
for col in water2:
    el = [col.split() for col in water2]

Результат:
print (el)
[['HETATM', '1', 'H', 'HOH', 'A', '1', '27.265', '36.739', '58.126'],
['HETATM', '2', 'H', 'HOH', 'A', '1', '27.109', '35.124', '57.944'],
['HETATM', '3', 'O', 'HOH', 'A', '1', '27.486', '35.958', '57.542']]


Оно?
Ответ написан
Комментировать
@twistfire92
Python backend developer
Конкретно в вашем случае он скорее всего ругался, когда обрабатывал последнюю строку END. там split возвращает список из одного элемента, а вы обращаетесь ко второму элементу.

Да и for col in water2: тут не нужен.

water2=['HETATM 1 H HOH A 1 27.265 36.739 58.126', 
'HETATM 2 H HOH A 1 27.109 35.124 57.944', 
'HETATM 3 O HOH A 1 27.486 35.958 57.542']
el = [col.split() for col in water2]
Ответ написан
Комментировать
hottabxp
@hottabxp Куратор тега Python
Сначала мы жили бедно, а потом нас обокрали..
with open('watercube.pdb','r+') as file:
	waters = file.read().splitlines()

for water in waters:
	try:
		v1, v2, v3, v4, v5, v6, v7, v8, v9 = water.split() # v от слова value - значение.
		print(v1, v2, v3, v4, v5, v6, v7, v8, v9)
	except ValueError:
		pass
	except IndexError:
		pass
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы