Академия Eduson

Работа с текстовыми файлами. Часть 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]