2014-02-20 3 views
-1
lst = ['hello world', 'hi I am Josh'] 

Я хочу написать два файла, один из которых содержит lst [0] и другой lst [1]. Таким образом, это не работает, потому что файл переписывается.Создать файл без перезаписи с помощью python?

for wd in lst: 
    with open('hey.txt', 'wb') as f: 
     f.write(wd) 

Как я могу исправить этот код?

+0

Почему у вас может быть два разных файла с одинаковым именем в одном и том же месте? Подумайте о том, что вы пытаетесь сделать здесь. – turbo

ответ

5

Вам необходимо указать различные имена файлов:

Это выведет «привет мир» в hey0.txt и «привет Я Джош» в hey1.txt

Вы можете заменить событие :

open('hey%s.txt' % index 

часть с:

open('hey%s.txt' % (index if index else '') 

Таким образом, вы будете иметь «hey.txt» и «hey1.txt» (это не добавляет индекс, если он равен 0)

+0

очень полезно! Я не знал метод «%», как он работает? Почему мы используем% s? Большое спасибо! – user3156806

+0

Он заменяет часть строки аргументами, которые вы передаете ей. iirc,% s означает «использовать его как строку» (вы можете иметь некоторое форматирование номера с этим синтаксисом). Это похоже на то, что я написал 'hey' + str (index) + '.txt'. Еще несколько объяснений здесь: http://docs.python.org/2/library/stdtypes.html#string-formatting – Vincent

3

Вы можете изменить порядок ваших петель:

with open('hey.txt', 'wb') as f: 
    for wd in lst: 
     f.write(wd) 

Или вы можете переключиться в режим "дописывания":

for wd in lst: 
    with open('hey.txt', 'ab') as f: 
     f.write(wd) 

Или записать все это на одном дыхании:

with open('hey.txt', 'wb') as f: 
    f.write("\n".join(lst)) 

Или напишите в двух разных файлах:

for j, wd in enumerate(lst): 
    with open('hey_%i.txt' % j, 'wb') as f: 
     f.write(wd) 
+0

Я забыл «перечислить» при написании своего ответа. Я считаю, что это чище, чем объявление индексной переменной так, как я сделал :) – Vincent

Смежные вопросы