我正在探索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它只是打印我最后一个条目。
提前致谢, 尼尔斯
答案 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()函数。但是,我确实重命名了file
和list
,因为它们都是内置函数的名称,当您使用这些名称时,它们就是隐藏的。
您也只需要打开一次文件,而不是每行打开一次。您在每次写入时都截断了文件。使用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写的那样。