在linux中迭代os.walk

时间:2011-03-31 10:17:38

标签: python

我们有多个linux服务器,我想获得特定Linux服务器中文件和目录的所有细节。我知道这可以用os.walk函数完成,但它只存储单个文件信息。请找到以下代码

import os
for d in os.walk('/'):
    F = open('/home/david/Desktop/datafile.txt', 'w')
    F.write(str(d) + '\n')
    F.close()

提前致谢

4 个答案:

答案 0 :(得分:6)

您可以使用上下文管理器

import os
with open('/home/david/Desktop/datafile.txt', 'w') as F:
    for d in os.walk('/'):
        F.write(str(d) + '\n')

答案 1 :(得分:4)

您应该附加到文件而不是只写入文件(每次打开文件时都会重置文件内容)。要启用追加模式,请传递a而不是w

然而,没有必要这样做 - 只需打开文件一次并继续写入文件而不是每次循环迭代重新打开文件句柄(这是浪费时间!)

F = open('/home/david/Desktop/datafile.txt', 'w')
for d in os.walk('/'):
  F.write(str(d) + '\n')
F.close()

您还可以使用with语句,为您自动close()

with open(...) as F:
      for d in ..
         ...

答案 2 :(得分:2)

在每次迭代中重新创建相同的文件没有任何意义。您可以在循环外移动open(),也可以使用append-mode'a'重新打开循环内的文件。

答案 3 :(得分:2)

您只获得一个条目,因为您的文件写入没有被追加,他们正在从头开始创建文件。

另请参阅os.walk()的文档。给出了每个访问过的文件夹中的文件列表:

import os
f=file(r'/home/david/Desktop/datafile.txt', 'a') # <---- Note "a"
for root, files, dirs in os.walk('/'):
    f.write('Currently in: ' + root + '\n')
    f.write(' '*4 + 'Files:\n')
    for ff in files:
        f.write(' '*8 + ff + '\n')
    f.write(' '*4 + 'Folders:\n')
    for ff in dirs:
        f.write(' '*8 + ff + '\n')