То, как вы задаете вопросы, которые вы задаете, показывает мне, что вы не совсем понимаете, что вы хотите, чтобы ваша программа сделала в конечном итоге.
Во-первых, эта строка не просто конвертирует файл в список. Он преобразует его в список кортежей. Каждый кортеж представляет собой набор значений, разделенных пробелом, для одной строки в файле.
Я отвечу на ваши вопросы в том виде, в каком они были даны, но я надеюсь, что некоторые ответы могут еще больше запутать вас.
1 файл, который он открывает, является динамическим, а не статическим? пользователь выбирает файл для открытия.
"cluster2.wcf"
не обязательно должно быть строкой. Это может быть переменная. Если вы хотите буквально прочитать ваш вопрос, вот как вы можете изменить код, чтобы сделать это:
filename = raw_input("Which file would you like to read: ")
l = [s.strip().split() for s in open(filename).readlines()]
Здесь стоит отметить. После того, как вы прочитаете файл в список, список будет выглядеть так:
[('This', 'is', 'the', 'first', 'line.'),
('This', 'is', 'the', 'second', 'line.'),
('And', 'finally', 'the', 'last', 'line.')]
Каждый элемент вашего списка представляет собой дополнительный список всех «слов» в этой строке. Слова, определенные как разделенные пробелами группы символов.
2 Выберите определенные строки для чтения после преобразования в список.
Этот вопрос является запутанным вопросом. Вы уже прочитали файл. Вы хотите прочитать это снова? Я предполагаю, что вы на самом деле имеете в виду: «Как мне работать с определенной строкой файла после того, как я прочитал ее в список?». Я отвечу на этот вопрос.
Каждая строка файла будет соответствовать определенному элементу списка. Доступ к элементам списка осуществляется по номерам, начинающимся с 0. Первая строка вашего файла будет в l[0]
. Второй в l[1]
и так далее до (и это немного магии Python здесь) l[-1]
. Отрицательные индексы в Python считаются в обратном направлении от конца списка.
3 назначать объекты значениям в списке
Это сбивает с толку, потому что вы не указываете, какие объекты вы хотите назначить или что вы хотите делать со списком после того, как вы присвоите объектам значения в нем. Вот ответ, который буквально воспринимает ваш вопрос ...
l[0] = object()
Это назначает объект элементу списка, который содержал кортеж, представляющий первую строку вашего файла. Комбинируя это с предыдущим ответом, держу пари, вы можете выяснить, как назначить объект любому элементу вашего списка.
4 выбрать первое, последнее или количество значений в каждой строке?
Это зависит от того, как именно вы хотите их выбрать. Если вы хотите сделать это индивидуально, вы делаете это следующим образом:
first_word_of_first_line = l[0][0]
last_word_of_first_line = l[0][-1]
first_word_of_last_line = l[-1][0]
last_word_of_last_line = l[-1][-1]
first_five_words of_second_line = l[1][0:5] # The : is for specifying a range of values
last_five_words_of_first_line = l[0][-5:] # The : with no end means 'until the end'
К сожалению, способ получить первые 4 слова первых 2 строк не такой:
first_four_words_of_first_two_lines = l[0:2][0:4] # DOESN'T WORK!!!
Причина этого заключается в том, что результатом выборки диапазона значений из списка является список, и поэтому [0:4]
применяется вместо этого списка. Что вы действительно хотите сделать, это применить [0:4]
, чтобы применить к каждому элементу результирующего списка, чтобы создать новый список. Вот как бы вы это сделали:
first_four_words_of_first_two_lines = [x[0:4] for x in l[0:2]]
Это дает вам новый список, который выглядит следующим образом (учитывая пример для вопроса 1):
[('This', 'is', 'the', 'first'),
('This', 'is', 'the', 'second')]
Надеюсь, это полезно. Как я уже сказал, я думаю, что ваши вопросы указывают на некоторую путаницу в вещах. Но я не знаю, о чем они говорят, так что я просто попытался ответить на них как мог.