Уведомления

Группа в Telegram: @pythonsu

#1 Июль 24, 2017 02:10:14

ss100s
Зарегистрирован: 2016-02-29
Сообщения: 33
Репутация: +  0  -
Профиль   Отправить e-mail  

writelines и запись посторочно

Есть ‘list’ такого содержания:

 ['@dom1.com', '@ddom2.com', '@dom3.com', '@dom4.com', '@dom5.com', '@dom6.com', '@dom7.com']
 f.writelines(list)
Записало его в таком формате:
@dom1.com@ddom2.com@dom3.com@dom4.com@dom5.com@dom6.com@dom7.com
что неожиданно. Нужно построчно:
@dom1.com
@ddom2.com
@dom3.com
@dom4.com
@dom5.com
@dom6.com
@dom7.com

Офлайн

#2 Июль 24, 2017 03:43:06

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

writelines и запись посторочно

 data = ['@dom1.com', '@ddom2.com', '@dom3.com', '@dom4.com', '@dom5.com', '@dom6.com', '@dom7.com']
with open("имя_файла", "wt", encoding="utf-8) as f:
    f.write("\n".join(data))



Офлайн

#3 Июль 24, 2017 06:15:49

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

writelines и запись посторочно

может

 print(i,file=f)



Офлайн

#4 Июль 24, 2017 07:32:32

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

writelines и запись посторочно

Если список длинный (10000 элементов), то надо пропустить через генератор.

  
>>> import sys
>>> 
>>> lst = ['a', 'b', 'c']
>>> 
>>> g = (i + '\n' for i in lst)
>>> 
>>> sys.stdout.writelines(g)
a
b
c
>>>



Офлайн

#5 Июль 24, 2017 08:27:21

ss100s
Зарегистрирован: 2016-02-29
Сообщения: 33
Репутация: +  0  -
Профиль   Отправить e-mail  

writelines и запись посторочно

Еще такой момент. Хотел убрать все @ таким образом:

 dom = dom.replace('@','')
Но похоже с списками не работает:
 AttributeError: 'list' object has no attribute 'replace'

Отредактировано ss100s (Июль 24, 2017 08:27:43)

Офлайн

#6 Июль 24, 2017 09:08:47

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

writelines и запись посторочно

 for i in lst:
    print(i[1:], file=f)
называть объект list нежелательно т.к. это прячет настоящий list



Офлайн

#7 Июль 25, 2017 00:49:00

ss100s
Зарегистрирован: 2016-02-29
Сообщения: 33
Репутация: +  0  -
Профиль   Отправить e-mail  

writelines и запись посторочно

Не сообразил, что значит

  file=f
doza_and
 for i in lst: 
    print(i[1:])
распечатывает элементы списка построчно. Как из загнать обратно в список?

Отредактировано ss100s (Июль 25, 2017 00:49:51)

Офлайн

#8 Июль 25, 2017 06:03:27

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

writelines и запись посторочно

ss100s
Как из загнать обратно в список?
Из это их?
Вы не просили список это уже другая задача

ss100s
,file=f
 data = ['@dom1.com', '@ddom2.com', '@dom3.com', '@dom4.com', '@dom5.com', '@dom6.com', '@dom7.com']
xd = [i[1:] for i in data]
with open("a.dat", "wt", encoding="utf-8") as f:
    for i in xd:
        print(i,file=f)

Имейте ввиду правильность кода зависит от контрактов относительно входных данных. вы про это ничего не сказали.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version