Python不会从列表中写入所有条目

时间:2011-07-19 13:28:49

标签: python file list join

我正在探索python并试图通过最后修改对目录中的所有文件进行排序,然后将列表写入txt文件。

    import time
    import os
    i=1
    a="path"
    def getfiles(dirpat):
        b = [s for s in os.listdir(dirpat)
             if os.path.isfile(os.path.join(dirpat, s))]
        b.sort(key=lambda s: os.path.getmtime(os.path.join(dirpat, s)))
        return b
    lyst=[]
    testfile='c://test.txt'
    lyst=getfiles(a)
    for x in range (0,len(lyst)):
        print lyst[x]    
        fileHandle = open (testfile, 'w' )    
        fileHandle.write ("\n".join(str(lyst[x])))
        fileHandle.close()

它完美打印并按日期排序

    example1.pdf
    example3.docx
    example4.docx
    exmaple2.docx
    example 5.doc

但是当我打开文件时,它只有最后一个条目并显示如下

    e
    x
    a
    ... and so on

无法弄清问题所在。如果我删除“\ n”.join它只是打印我最后一个条目。

提前致谢, 尼尔斯

5 个答案:

答案 0 :(得分:4)

纠正join(),例如:

'\n'.join(str(path) for path in list)

请重命名“list”变量,因为list是Python中的内置数据类型。

答案 1 :(得分:3)

import os, os.path

a="path"

def getfiles(dirpat):
    b = [s for s in os.listdir(dirpat)
         if os.path.isfile(os.path.join(dirpat, s))]
    b.sort(key=lambda s: os.path.getmtime(os.path.join(dirpat, s)))
    return b

outfile='c://test.txt'

with open(outfile, 'w') as fileHandle:
    lines = getfiles(a)
    for line in lines:
        print line
        fileHandle.write(line)

避免使用无意义的一个字符变量名。我也没有触及你的getfiles()函数。但是,我确实重命名了filelist,因为它们都是内置函数的名称,当您使用这些名称时,它们就是隐藏的。

您也只需要打开一次文件,而不是每行打开一次。您在每次写入时都截断了文件。使用with可确保即使出现错误也会关闭文件句柄。

编辑:如果您在编写之前不需要打印每一行,那么with块中只能有一行:fileHandle.writelines(getfiles(a))

答案 2 :(得分:2)

在编写文件时执行此操作:

fileHandle = open (file, 'w' )  
for listItem in list:
    print listItem    
    fileHandle.write (str(listItem) + "\n")
fileHandle.close()

答案 3 :(得分:2)

您正在循环的每次迭代中打开和覆盖文件内容。

将'a'传递给open(path)调用以附加到文件,或者只是在循环外打开它并在循环外关闭它。

答案 4 :(得分:2)

因为您将列表中的每个条目转换为str,所以联接对每个条目进行操作 str因为它们也算作迭代,因此放在\n之间 每个字符,而不是列表中的每个项目。将行更改为fileHandle.write ('\n'.join(str(path) for path in list)))将解决此问题,就像BasicWolf写的那样。