python: чтение строк и работа с каждой из строк
Всем привет! Мне необходима работа со строками из файла. У меня есть файл bonus.py , в нем содержится:
1 2 3
И есть файл test.py , в нем содержится:
import bonus file = open('c://testper/bonus.py', 'r') qwe = file.readlines() print(qwe) # для считывания строк, что там вообще содержится if qwe == '1': print('Sucs!(1)') else: print('error')
Он выводит error, так как не обнаружил в файле bonus.py цифру 1. В print(qwe) выводится:
Как сделать так, чтобы он читал ВСЕ строки, и в строках искал то число, которое необходимо для вывода ‘Sucs(1)’?
Отслеживать
25k 4 4 золотых знака 20 20 серебряных знаков 36 36 бронзовых знаков
задан 12 авг 2021 в 12:01
113 6 6 бронзовых знаков
изменил file.readlines() на file.read() — в print(qwe) выводит: 1 2 3 (по каждой строке), но всё равно вылазит ошибка
12 авг 2021 в 12:15
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
- Так как в файле bonus.py находятся цифры: 1, 2, 3, где каждая с новой строки, следовательно в списке ‘qwe’ после каждой цифры стоит ‘\n’, ‘\n’ обозначает перенос на след. строчку.
- В этой строчке if qwe == ‘1’: вы сравниваете список со строкой, а не строку со строкой.
Вот один из вариантов решения:
import bonus file = open(r'c://testper/bonus.py', 'r') qwe = file.readlines() print(qwe) # для считывания строк, что там вообще содержится if '1\n' in qwe: print('Sucs!(1)') else: print('error')
Вот еще более удобный:
import bonus file = open(r'C:\Users\mihai\.spyder-py3/bonus.py', 'r') qwe = [x.strip() for x in file.readlines()] # убираем '\n' print(qwe) # для считывания строк, что там вообще содержится if '1' in qwe: print('Sucs!(1)') else: print('error')
Чтение файла без символов новой строки в Python
Существует распространенная задача при работе с файлами в Python, когда требуется считать данные из файла, но без символов новой строки (или перевода строки), которые обычно добавляются в конец каждой строки.
Возьмем в качестве примера текстовый файл с данными, в котором каждая строка представляет собой отдельный элемент. При применении стандартного метода чтения файлов в Python, такого как readlines() , каждая строка возвращается как отдельный элемент списка, но с символом новой строки ( \n ) в конце. Такой символ может мешать дальнейшей обработке данных, особенно если необходимо проводить операции сравнения или поиска подстроки.
# Пример чтения файла с использованием readlines() with open('file.txt', 'r') as f: lines = f.readlines()
В результате выполнения этого кода переменная lines будет содержать список строк из файла, но каждая строка будет оканчиваться символом новой строки.
Чтобы считать данные из файла без символов новой строки, можно использовать метод strip() , который удаляет пробелы и некоторые другие символы (включая символ новой строки) с обоих концов строки.
# Пример чтения файла без символов новой строки with open('file.txt', 'r') as f: lines = [line.strip() for line in f]
В этом примере для каждой строки в файле вызывается метод strip() , который удаляет символ новой строки в конце строки. В результате переменная lines будет содержать список строк из файла, но уже без символов новой строки.
Помимо этого, стоит отметить, что использование выражения for line in f является более эффективным способом чтения файла, поскольку он не загружает весь файл в память сразу, а читает его построчно. Это особенно важно при работе с большими файлами.
Считать строки
Даны 2 строки(в файле). В первой какое то предложение, а во второй слово.
Нужно чтобы все слова из первой строки в которых есть буква из второй были выведены через запятую и с заглавной буквы.
Если таких слов нет вывести None.
Помогите , это ОЧЕНЬ срочно
Добавлено через 2 минуты
И потом их нужно запихнуть в новый файл
Добавлено через 13 минут
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
data = [] with open("candies.txt", mode="r") as f: data = f.readlines() print(data) file_2 = open('secret.txt', mode='w') lower_statement = data[0].lower() lower_word = data[1].lower() new_words = [] for element in lower_word: for element_2 in lower_statement: if element[lower_word] in lower_statement: new_words.append(element_2(lower_statement)) file_2.write(new_words) file_2.close()
Вот мои попытки
Добавлено через 23 секунды
Напишите программу, которая попытается найти секрет. Она должна из файла candies.txt прочитать две строки. Затем в файл secret.txt записать все слова из первой строки, в которых есть хоть какие-то буквы из второй строки без учета регистра. Записать эти слова в порядке следования в файле с большой буквы через запятую и пробел. Если таких слов не оказалось, то в файл нужно записать None.
Еще вот лучше условие кину
Методы строк для начинающих
У строк в Python есть множество полезных методов для того, чтобы дать возможность делать со строками различные полезные и нужные действия.
Методы похожи на функции, их тоже можно вызывать и, так же как и функции, они могут возвращать результат своей работы. Отличие же методов в том, что они привязаны к определенному типу данных и, например, методы строк могут быть вызваны только у строк.
Все методы строк можно посмотреть в нашем справочнике , а вот несколько примеров того, как вызывать методы строк.
string = "Hello world!"print(string.lower()) # hello world!print(string.upper()) # HELLO WORLD!
Начинающему программисту важно помнить, что методы не меняют исходную строку. Строки в Python вообще нельзя изменить. Если вы хотите поменять все ее символы, например, на символы нижнего регистра, нужно присвоить строке новое значение
string = "Hello world!"string = string.lower()
Индексы строк ¶
Бывает так, что иногда появляется необходимость выбирать отдельные символы из строки. В Python для этого необходимо использовать квадратные скобки. В таблице ниже приведены примеры получения символа строки по индексу строки Python, помещенной в переменную string .
| Код | Результат | Описание |
|---|---|---|
| s[0] | P | Первый символ |
| s[1] | y | Второй символ |
| s[-1] | n | Последний символ |
| s[-2] | o | Предпоследний символ |
Как вы видите, необходимо учитывать, что номером индекса первого символа будет [0] Отрицательный индекс будет отсчитывать символы с конца строки. Распространенная ошибка: предположим, что мы пытаемся задать индекс s[12] . Но в примере выше мы имеем всего шесть элементов строки, и логично что Python выдаст ошибку следующего содержания:
IndexError: string index out of range
Срезы строк ¶
Срез используется для выделения части строки. Он состоит из индекса и диапазона. Ниже расположены несколько примеров со строкой
string = 'абвгдежзик'
0 1 2 3 4 5 6 7 8 9
а б в г д е ж з и к
| Фрагмент кода | Результат | Описание |
|---|---|---|
| string[ 2 : 5 ] | вгд | Символы с индексом 2, 3, 4 |
| string[ : 5 ] | абвгд | Первые пять символов |
| string[ 5 : ] | ежзик | Символы, начиная с индекса 5 и до конца |
| string[ -2 : ] | ик | Последние два символа |
| string[ : ] | абвгдежзик | Вся строка |
| string[1 : 7 : 2] | бге | Со второго по шестой символы, через один |
| string[ : : -1 ] | кизжедгвба | Обратный шаг, строка наоборот |
Базовая структура среза выглядит следующим образом: Строка [начальный\_символ : конечный_символ + 1]
Срезы не включают явное расположение окончания строки. Например, в приведенном выше примере string[2:5] , Python выведет символы с индексами 2, 3 и 4, но не символ с индексом 5.
Мы можем оставить, вместо индекса начала или окончания строки, пустоту. Пустота на месте индекса начала будет по умолчанию равна нулю. Итак, string[:5] выведет первые пять символов строки string. А в случае string[5:] , Python покажет символы, начиная с индекса 5 и до конца строки. Если же использовать отрицательные индексы, мы получим символы с конца строки. Например, string[-2:] — это последние два символа.
Также существует необязательный третий аргумент, который указывает на шаг среза строки. Например, string[1:7:2] берет каждый второй символ из строки с индексом 1, 3 и 5.
