Строка, которую вы напечатали, возвращает строку:
open('urls.txt', "r+").readlines()[x]
open
возвращает объект файла. Его метод readlines
возвращает список строк. Индексирование с помощью [x]
возвращает третью строку в файле в виде одной строки.
Первая проблема заключается в том, что вы открываете файл, не закрывая его. Во-вторых, ваш индекс не определяет диапазон строк до конца. Вот дополнительное улучшение:
with open('urls.txt', 'r+') as f:
lines = f.readlines()[x:]
Теперь lines
- это список всех строк, которые вы хотите. Но сначала вы читаете весь файл в память, а затем отбрасываете первые две строки. Кроме того, список является итеративным, а не итератором, поэтому для эффективного использования next
в нем вам потребуется выполнить дополнительный шаг:
lines = iter(lines)
Если вы хотите использовать тот факт, что файл уже является довольно эффективным итератором, примените к нему next
столько раз, сколько вам нужно, чтобы удалить ненужные строки:
with open('urls.txt', 'r+') as f:
for _ in range(x):
next(f)
# now use the file
print(next(f))
После цикла for
любая операция чтения файла начинается с третьей строки, будь то next(f)
, f.readline()
и т. Д.
Есть несколько других способов убрать первые строки. Во всех случаях, включая приведенный выше пример, next(f)
можно заменить на f.readline()
:
for n, _ in enumerate(f):
if n == x:
break
или
for _ in zip(f, range(x)): pass
После запуска любого из этих циклов next(f)
вернет x
-ую строку.