2011-03-31 79 views
1

os.walk我們有多個Linux服務器,我想獲得在特定的Linux服務器的文件和目錄的所有細節。我知道這可以用os.walk函數來完成,但它只存儲單個文件信息。請找到下面的代碼提前遍歷在linux

回答

6

你可以使用一個上下文管理

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

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

感謝您應該追加到該文件,而不是僅僅寫它(這重置每次你打開它時該文件的內容)。要啓用附加模式,請通過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

重新創建每個迭代在同一文件內沒有任何意義。您可以在循環外部移動open(),也可以使用append-mode'a'重新打開循環內的文件。

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')