Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 25, 2014 00:23:20

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9879
Репутация: +  853  -
Профиль   Отправить e-mail  

чтение текстового файла в массив

Забыл в тот раз добавить разделение на строки ещё (поправил там). Ведь мы не можем обрабатывать строки, не отыскав их сначала.

А ещё бывает MemoryError, когда хочешь большой файл загрузить в список.

Alen
И в O(n^2) / O(n) в случае если со строками производятся операции.
Чего? n^2 - это если ты прочитал строки, а потом на основе каждой строки стал что-то делать с каждой строкой.
Если же ты сначала прочитал строки, а потом стал с ними что-то делать - это n + n = 2n.



Отредактировано py.user.next (Сен. 25, 2014 00:31:25)

Офлайн

#2 Сен. 25, 2014 07:19:24

Alen
Зарегистрирован: 2013-08-01
Сообщения: 373
Репутация: +  49  -
Профиль   Отправить e-mail  

чтение текстового файла в массив

py.user.next
Чего? n^2 - это если ты прочитал строки, а потом на основе каждой строки стал что-то делать с каждой строкой.

Я так и написал.

Офлайн

#3 Сен. 25, 2014 07:29:25

Alen
Зарегистрирован: 2013-08-01
Сообщения: 373
Репутация: +  49  -
Профиль   Отправить e-mail  

чтение текстового файла в массив

py.user.next
Если же ты сначала прочитал строки, а потом стал с ними что-то делать - это n + n = 2n.

Ну а прочитал ты их в ту же память.

Офлайн

#4 Сен. 25, 2014 07:55:56

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9879
Репутация: +  853  -
Профиль   Отправить e-mail  

чтение текстового файла в массив

Alen
Я так и написал.
Так там нет квадрата.

Квадрат - это вот:
>>> for i in range(5):
...   for j in range(5):
...     print(i, j)
... 
0 0
0 1
0 2
0 3
0 4
1 0
1 1
1 2
1 3
1 4
2 0
2 1
2 2
2 3
2 4
3 0
3 1
3 2
3 3
3 4
4 0
4 1
4 2
4 3
4 4
>>>

А вот это 2n:
>>> for i in range(5):
...     print(i)
... 
0
1
2
3
4
>>> for i in range(5):
...     print(i)
... 
0
1
2
3
4
>>>

Он прочитал строки, что-то сделал с каждой, потом записал строки - это всё 3n получилось.

Говорим про то, что быстрее и менее затратно по памяти, .read() из файла и создание списка или перебор файла как итератора без создания списка.

Alen
Ну а прочитал ты их в ту же память.

Есть затраты по времени, есть затраты по памяти. Что по времени, что по памяти перебор итератора не является более затратным, чем .read() + split().



Отредактировано py.user.next (Сен. 25, 2014 07:58:10)

Офлайн

#5 Сен. 27, 2014 19:51:26

russian_bear
Зарегистрирован: 2014-09-23
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

чтение текстового файла в массив

alexsis
Открываете новый файл и в него записываете командой write.

ок, спасибо, а как записать ВЕСЬ массив в файл ?
прочитан файл был вот так:
with open('ctest/bigfile.txt', ‘r’) as big_file:
array_of_strings = big_file.read().split('\n')

записывать умею только вот так:
f = open('ctest/out_file.txt', ‘r+’)
f.write(array_of_strings)
f.close()


собственно не могу понять, как вот в этой команде f.write(array_of_strings) указать весь массив, а не какой-то его один элемент

Отредактировано russian_bear (Сен. 27, 2014 19:57:52)

Офлайн

#6 Сен. 28, 2014 01:00:12

sypper-pit
От: Ulan-Ude(msk)
Зарегистрирован: 2009-01-30
Сообщения: 1102
Репутация: +  6  -
Профиль   Отправить e-mail  

чтение текстового файла в массив

russian_bear
Как я понял из кода тебе нужно вложить всё что взял в bigfile.txt обработал и потом всё это закинул в out_file.txt

Тут есть 2 способа
1) создать цикл который построчно будет записывать в фаил
2) использовать readlines

Офлайн

#7 Сен. 28, 2014 13:32:24

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

чтение текстового файла в массив

russian_bear
А как обратиться допустим к 5 строке и заменить ее на “бла-бла-бла” ?
рекомендую посмотреть https://docs.python.org/3/library/linecache.html
Однако в самом деле нужно больше конкретики.



Офлайн

#8 Сен. 28, 2014 17:41:34

sypper-pit
От: Ulan-Ude(msk)
Зарегистрирован: 2009-01-30
Сообщения: 1102
Репутация: +  6  -
Профиль   Отправить e-mail  

чтение текстового файла в массив

doza_and
Да это тоже хорошее решение, можно использовать если питон не ниже 2.5 версии.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version