Работа с текстовыми файлами. Часть 2
Позиция считывания в файле, работа с менеджером контекста
Вызов каких файловых методов (без переданных аргументов) всегда переводит курсор (текущую позицию) в конец файла?
Ответ: readlines(); read()
Файл numbers.txt содержит строки:
78 12 10
Что выведет приведенный ниже код?:
with open('numbers.txt', encoding='utf-8') as file: line1 = file.readline() line2 = file.read() print(line2)
Ответ: 12; 10
Файл words.txt содержит строки:
conflict connection advice remember consciousness consensus
Что выведет приведенный ниже код?:
with open('words.txt', encoding='utf-8') as file: line1 = file.readline().split() file.seek(0) line2 = file.readline().split() print(max(line2, key=len))
Ответ: connection
Закрытие файлового объекта после его использования лучше осуществить с помощью:
Ответ: использования менеджера контекста with
Файл input.txt содержит строки:
pop goes the weasel!
Что выведет приведенный ниже код?:
with open('input.txt', encoding='utf-8') as file: print('Repeat after me:', file.readline().strip()) for line in file: print(line.strip() + '!')
Ответ: Repeat after me: pop; goes!; the!; weasel!!
Вам доступен текстовый файл text.txt с одной строкой текста. Напишите программу, которая выводит на экран эту строку в обратном порядке.
with open('text.txt') as file: line = file.read() print(line[::-1])
Вам доступен текстовый файл data.txt, в котором записаны строки текста. Напишите программу, выводящую все строки данного файла в обратном порядке: сначала последнюю, затем предпоследнюю и т.д.
with open('data.txt') as file: arg = file.readlines() for i in range(len(arg)): print(arg[len(arg) - 1 - i].strip())
Вам доступен текстовый файл lines.txt, в котором записаны строки текста. Напишите программу, которая выводит все строки наибольшей длины из файла, не меняя их порядок.
m_len = 0 m_str = [] with open('lines.txt') as file: for line in file.readlines(): if len(line) > m_len: m_len = len(line) m_str = [line] elif len(line) == m_len: m_str.append(line) for elem in m_str: print(elem, end = '')
Вам доступен текстовый файл numbers.txt, каждая строка которого может содержать одно или несколько целых чисел, разделенных одним или несколькими пробелами. Напишите программу, которая вычисляет сумму чисел в каждой строке и выводит эту сумму на экран (для каждой строки выводится сумма чисел в этой строке).
with open('numbers.txt') as file: for line in file.readlines(): print(sum([int(elem) for elem in line.split()]))
Вам доступен текстовый файл nums.txt. В файле могут быть записаны целые неотрицательные числа и все что угодно. Числом назовем последовательность одной и более цифр, идущих подряд (число всегда неотрицательно). Напишите программу, которая вычисляет сумму всех чисел, записанных в файле.
summ = 0 with open('nums.txt') as file: for line in file.readlines(): result_line = '' for elem in line: result_line += elem if elem.isdigit() else ' ' summ += sum([int(elem) for elem in result_line.split()]) print(summ)
Вам доступен текстовый файл file.txt, набранный латиницей. Напишите программу, которая выводит количество букв латинского алфавита, слов и строк.
linesN = 0 wordsN = 0 lettersN = 0 with open('file.txt') as file: for line in file.readlines(): linesN += 1 wordsN += len(line.split()) lettersN += len([elem for elem in line if elem.isalpha()]) print("Input file contains:\n" + str(lettersN) + " letters\n" + str(wordsN) + " words\n" + str(linesN) + " lines")
Вам доступны два текстовых файла first_names.txt и last_names.txt, один с именами, другой с фамилиями. Напишите программу, которая c помощью модуля random создает 3 случайные пары имя + фамилия, а затем выводит их, каждую на отдельной строке.
from random import randint firstN = [] lastN = [] with open('first_names.txt') as file: for line in file.readlines(): firstN.append(line) with open('last_names.txt') as file: for line in file.readlines(): lastN.append(line) for i in range(3): print(firstN[randint(0, len(firstN))].strip() + ' '+lastN[randint(0,len(lastN))].strip())
Вам доступен текстовый файл population.txt с названиями стран и численностью их населения, разделенными символом табуляции '\t'. Напишите программу выводящую все страны, название которых начинается с буквы 'G', численность населения которых больше чем 500000 человек, не меняя их порядок.
from random import randint with open('population.txt') as file: for line in file.readlines(): if (line.startswith('G') and int(line.strip().split()[-1]) > 500000): print(line.strip().split()[0])
Вам доступен CSV-файл data.csv, содержащий информацию в csv формате. Напишите функцию read_csv для чтения данных из этого файла. Она должна возвращать список словарей, интерпретируя первую строку как имена ключей, а каждую последующую строку как значения этих ключей.
def read_csv(): with open('data.csv') as file: keys = file.readline().strip().split(',') return [dict(zip(keys, line.strip().split(','))) for line in file]