#python #python-3.x
Вопрос:
Попытка прочитать текстовый файл в 2D-список в Python. «people2.txt » — это отдельные строки в последовательности (каждый элемент в своей отдельной строке).
fred
23
ann
27
bob
24
Код пока:
details_list=[]
people2=open("people2.txt","r")
for line in people2.readlines():
details_list.append(line.split())
people2.close()
print(details_list)
Я получаю каждый элемент в своем собственном списке, когда мне нужны «пары»? Я получаю
[["fred"],["23"],["ann"],["27"],["bob"],["24"]]
Что мне нужно, так это:
[["fred","23"],["ann","27"],["bob","24"]]
Комментарии:
1.
line.split()
вам ничего не нужно, используйтеline.strip()
для его очистки. Разве вы не предпочли бы использовать словарь?
Ответ №1:
Используйте:
with open("people.txt") as infile:
res = []
for name, value in zip(infile, infile):
res.append([name.strip(), value.strip()])
print(res)
Вывод
[['fred', '23'], ['ann', '27'], ['bob', '24']]
Выражение:
for name, value in zip(infile, infile):
позволяет выполнять итерацию фрагментами по две строки над файлом, в качестве дополнительного примечания вы также должны использовать диспетчер контекста для чтения файлов.
Комментарии:
1. Вероятно, вам следует объяснить, что происходит в
zip(*[infile]*2)
(также, неzip(infile, infile)
будет делать?)2. @AKX обновил ответ, спасибо за совет.
3. Это также можно было бы включить в понимание списка, сделав его приятным и понятным для python!
res = [name.strip(), value.strip() for name, value in zip(infile, infile)]
4. @SergeBallesta — это имя файла, который я обычно использую для тестирования. В любом случае обновил ответ. Спасибо, что обратили на это внимание.
Ответ №2:
Если у вас уже есть плоский список строк (который у вас будет, если вы замените line.split()
на line.strip()
), вы можете взять 2 фрагмента этого списка с помощью шага 2 (т. Е. Один фрагмент содержит элементы с четным индексом, другой — элементы с нечетным индексом), а затем использовать zip
для их объединения:
lines = ["Fred", "23", "Ann", "27", "Bob", "24"]
pairs = list(zip(lines[::2], lines[1::2]))
print(pairs)
Это выводит
[('Fred', '23'), ('Ann', '27'), ('Bob', '24')]
Это работает не только для чтения файлов, но если у вас большой файл, было бы эффективнее просто прочитать их как пары для начала.