Как найти номер строки в файле python
Строка считывается со стандартного ввода функцией input() . Напомним, что для двух строк определена операция сложения (конкатенации), также определена операция умножения строки на число.
Строка состоит из последовательности символов. Узнать количество символов (длину строки) можно при помощи функции len .
Любой другой объект в Питоне можно перевести к строке, которая ему соответствует. Для этого нужно вызвать функцию str() , передав ей в качестве параметра объект, переводимый в строку.
На самом деле каждая строка, с точки зрения Питона, — это объект класса str. Чтобы получить по объекту другой объект другого класса, как-то ему соответствующий, можно использовать функцию приведения. Имя этой функции совпадает с именем класса, к которому мы приводим объект. (Для знатоков: эта функция — это конструктор объектов данного класса.) Пример: int — класс для целых чисел. Перевод строки в число осуществляется функцией int() .
What is the answer? 42
s = input() print(len(s)) t = input() number = int(t) u = str(number) print(s * 3) print(s + ' ' + u)
2. Срезы (slices)
Срез (slice) — извлечение из данной строки одного символа или некоторого фрагмента подстроки или подпоследовательности.
Есть три формы срезов. Самая простая форма среза: взятие одного символа строки, а именно, S[i] — это срез, состоящий из одного символа, который имеет номер i . При этом считается, что нумерация начинается с числа 0. То есть если , то , , , , .
Заметим, что в Питоне нет отдельного типа для символов строки. Каждый объект, который получается в результате среза S[i] — это тоже строка типа str.
Номера символов в строке (а также в других структурах данных: списках, кортежах) называются индексом.
Если указать отрицательное значение индекса, то номер будет отсчитываться с конца, начиная с номера -1 . То есть , , , , .
Или в виде таблицы:
| Строка S | H | e | l | l | o |
| Индекс | S[0] | S[1] | S[2] | S[3] | S[4] |
| Индекс | S[-5] | S[-4] | S[-3] | S[-2] | S[-1] |
Если же номер символа в срезе строки S больше либо равен len(S) , или меньше, чем -len(S) , то при обращении к этому символу строки произойдет ошибка IndexError: string index out of range .
Срез с двумя параметрами: S[a:b] возвращает подстроку из b — a символов, начиная с символа c индексом a , то есть до символа с индексом b , не включая его. Например, S[1:4] == ‘ell’ , то же самое получится если написать S[-4:-1] . Можно использовать как положительные, так и отрицательные индексы в одном срезе, например, S[1:-1] — это строка без первого и последнего символа (срез начинается с символа с индексом 1 и заканчиватеся индексом -1, не включая его).
При использовании такой формы среза ошибки IndexError никогда не возникает. Например, срез S[1:5] вернет строку ‘ello’ , таким же будет результат, если сделать второй индекс очень большим, например, S[1:100] (если в строке не более 100 символов).
Если опустить второй параметр (но поставить двоеточие), то срез берется до конца строки. Например, чтобы удалить из строки первый символ (его индекс равен 0), можно взять срез S[1:] . Аналогично если опустить первый параметр, то можно взять срез от начала строки. То есть удалить из строки последний символ можно при помощи среза S[:-1] . Срез S[:] совпадает с самой строкой S .
Любые операции среза со строкой создают новые строки и никогда не меняют исходную строку. В Питоне строки вообще являются неизменяемыми, их невозможно изменить. Можно лишь в старую переменную присвоить новую строку.
На самом деле в питоне нет и переменных. Есть лишь имена, которые связаны с какими-нибудь объектами. Можно сначала связать имя с одним объектом, а потом — с другим. Можно несколько имён связать с одним и тем же объектом.
Если задать срез с тремя параметрами S[a:b:d] , то третий параметр задает шаг, как в случае с функцией range , то есть будут взяты символы с индексами a , , и т. д. При задании значения третьего параметра, равному 2, в срез попадет кажый второй символ, а если взять значение среза, равное -1 , то символы будут идти в обратном порядке. Например, можно перевернуть строку срезом S[::-1] .
s = 'abcdefg' print(s[1]) print(s[-1]) print(s[1:3]) print(s[1:-1]) print(s[:3]) print(s[2:]) print(s[:-1]) print(s[::2]) print(s[1::2]) print(s[::-1])
Как в текстовом файле найти номер строки с заданным текстом в python?
Добрый вечер! Подскажите есть ли какой то оператор который будет искать заданный текст в текстовом документе и выводить в какой строке он это нашёл. И если не нашёл изменял переменную? Или это всё таки надо делать на циклах. Если туплю не бейте. Мне 13.
- Вопрос задан более трёх лет назад
- 5469 просмотров
6 комментариев
Простой 6 комментариев
Как мне узнать номер строки в файле и забрать из нее данные?
У меня есть 2 файла. В одном и в другом построчно написаны данные. Мне нужно взять определенную строку в одном файле и по номеру строки найти данные в другом файле (может это можно сделать и не по номеру строки). Можете объяснить как это лучше сделать в плане кода. При том что в файлах разные данные и каждая строка одного файла связана с каждой строкой другого. Мне нужно взять данные из второго файла, зная в каком ряду нужные мне данные в первом файле. Первый файл:
14CaBzRbZDuGJCAdu9CZsbrCfyv4K7f7sf;31 0xd4FD252d7D2C9479a8d616F510eAC6243B5DDdf9;3 3Dxvjt7N8sbeUoTbASF5dBqEeSMc1o7Pk1;12 0x944680402B2Ba554f978714b6039755ED10e7466;8
Второй файл:
0.0 0.0 7.91778246 0.5476858867775038
Отслеживать
задан 4 авг 2020 в 8:15
71 1 1 серебряный знак 7 7 бронзовых знаков
readlines() читает строки и выдает их в виде списка, откуда элементарно взять по номеру любую строку.
4 авг 2020 в 8:31
@Эникейщик А как мне узнать номер строки в первом файле?
Python-сообщество
![]()
- Начало
- » Python для новичков
- » Как узнать номер последней строки файла?
#1 Ноя. 9, 2017 21:07:41
Bjiq Зарегистрирован: 2017-11-09 Сообщения: 10 Репутация: 0 Профиль Отправить e-mail
Как узнать номер последней строки файла?
пока так сделал, но я думаю можно улучшить код, если учесть, что иногда файл может весит больше 5 Мб (600 000 строк)
def search_last_line(self): last_line = None for num, line in enumerate(self.open_file_to_read(), 0): last_line = num return last_line
#2 Ноя. 10, 2017 03:00:14
Slow Зарегистрирован: 2017-07-26 Сообщения: 88 Репутация: 4 Профиль Отправить e-mail
Как узнать номер последней строки файла?
при всем уважениии, быстрее, чем “дернуть субпроцессом ‘wc’ за ‘-l’” вы вряд ли напишете
#3 Ноя. 10, 2017 14:26:01
PEHDOM Зарегистрирован: 2016-11-28 Сообщения: 2196 Репутация: 294 Профиль Отправить e-mail
Как узнать номер последней строки файла?
вот тут люди задаются тем же вопросом
https://stackoverflow.com/questions/845058/how-to-get-line-count-cheaply-in-python
я там насчитал с десяток способов берешь пару тройку файлов разного размера, от пары килобайт до сотни МБ и проганяешь все способы измеряя время таймит-ом.
[code python][/code]
Бериегите свое и чужое время.
Отредактировано PEHDOM (Ноя. 10, 2017 14:26:18)
#4 Ноя. 11, 2017 07:51:17
damilkrose Зарегистрирован: 2017-11-10 Сообщения: 18 Репутация: -1 Профиль Отправить e-mail
Как узнать номер последней строки файла?
Если нужна скорость — юзай многопотоковое программирование — юзай threading. По крайней мере производительность и скорость моей программы(не скажу какой) увеличилась в x2.5 раз при том, что прога работала в 2-ух потоках, а не в 1-ом(мэйновском потоке).
#5 Ноя. 11, 2017 22:46:25
Bjiq Зарегистрирован: 2017-11-09 Сообщения: 10 Репутация: 0 Профиль Отправить e-mail
Как узнать номер последней строки файла?

Спасибо большое всем
#6 Ноя. 11, 2017 22:55:20
JOHN_16 От: Россия, Петропавловск-Камчатск Зарегистрирован: 2010-03-22 Сообщения: 3292 Репутация: 221 Профиль Отправить e-mail
Как узнать номер последней строки файла?
damilkrose
ну и как вам блин ваш совет поможет автору? КАК ?
_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com
#7 Ноя. 12, 2017 17:37:25
damilkrose Зарегистрирован: 2017-11-10 Сообщения: 18 Репутация: -1 Профиль Отправить e-mail
Как узнать номер последней строки файла?
JOHN_16
КАК ?
Под советом “используй threading” я имел в виду, bjiq, что ты можешь сделать свою прогу работающей в нескольких потоках. Подробнее: https://habrahabr.ru/post/149420/
Надо просто содержимое файла по возможности разделить на 2 части для 2-ух потоков.
А твой вариант совсем не плох.
Отредактировано damilkrose (Ноя. 12, 2017 17:38:00)
#8 Ноя. 12, 2017 17:45:36
FishHook От: Зарегистрирован: 2011-01-08 Сообщения: 8312 Репутация: 568 Профиль Отправить e-mail
Как узнать номер последней строки файла?
damilkrose
Объясни на пальцах. Вот есть у нас файл, надо узнать количество строк. Вопрос № 1: как не зная размер файла разбить его на две части? Вопрос № 2: что конкретно должен делать поток № 1 с частью файла № 1.
#9 Ноя. 12, 2017 19:17:28
damilkrose Зарегистрирован: 2017-11-10 Сообщения: 18 Репутация: -1 Профиль Отправить e-mail
Как узнать номер последней строки файла?
FishHook
Объясни на пальцах. Вот есть у нас файл, надо узнать количество строк. Вопрос № 1: как не зная размер файла разбить его на две части?
Размер узнать не так сложно:
import os size_of_file = os.path.getsize(путь_к_файлу) # размер файла в байтах.
С текстом проще все делается. если он говорит надо узнать кол. строк — значит, он имеет в виду текст.
with open("name.txt", "r") as file: lines = len(file.read().split()) if not lines % 2: part1 = lines[:(lines/2) part2 = lines[(lines/2):] else: part1 = lines[:(lines/2+0.5)] # даем 1-ой части на 1 строку больше part2 = lines[(lines/2-0.5):] # А второй - меньше # part1 - это первая половина текста в файле # part2 - это вторая половина
FishHook
Вопрос № 2: что конкретно должен делать поток № 1 с частью файла № 1
Сделать тоже, что и автор вопроса, только не со всем файлом:
Bjiq
self.open_file_to_read()
А по частям для каждого потока. Так дело пойдет гораздо быстрее. И размер тут не имеет особого значения если в деле говориться о строках
P. S. Написал что думаю. Если не прав в чем-то — пожалуйста докажи, и я извинюсь.
Отредактировано damilkrose (Ноя. 12, 2017 19:19:05)