2014-02-20 151 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

您需要指定不同的文件名:

在hey1.txt这将输出的“Hello World”,在hey0.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