2012-09-25 42 views
1

我有一個名爲main的目錄,其中包含兩個文件:名爲alex.txt的文本文件,其中只有100作爲其內容,而另一個名爲mark.txt的文件具有400如何獲取整個目錄的文件名和內容?

我想創建一個函數,將進入目錄,並採取每個文件名和該文件的內容,並將它們存儲(字典?)。所以最終的結果看起來是這樣的:

({'alex.txt', '100'}, {'mark.txt', '400'}) 

對於大量文件這樣做的最佳方式是什麼?

+0

是你有沒有要陷入任何子目錄? – tMC

+0

@tMC - 不,沒有。 – user1447941

回答

6

這看起來像一個好工作爲os.walk

d = {} 
for path,dirs,fnames in os.walk(top): 
    for fname in fnames: 
     visit = os.path.join(path,fname) 
     with open(visit) as f: 
      d[visit] = f.read() 

該解決方案也將遞歸到子目錄如果它們存在。

2

使用字典看起來像要走的路。

您可以使用os.listdir獲取directory中的文件列表。然後,迭代文件,打開它們中的每一個,閱讀它的輸入並將它們存儲在字典中。

如果您的main目錄有一些子目錄,您可能需要使用os.walk函數遞歸處理它們。否則堅持os.listdir

請注意,os.listdir的一項與main相關。打開文件之前,您可能需要將路徑添加到main。在這種情況下,請使用os.path.join(path_to_main, f),其中fos.listdir的一個項目。

1
import os 
bar = {} 
[bar.update({i: open(i, 'r').read()}) for i in os.listdir('.')] 

或(通過mgilson)

bar = dict((i,open(i).read()) for i in os.listdir('.')) 
+1

爲什麼不在'os.listdir('。'))'bar = dict((i,open(i).read())? – mgilson

+0

or a similar dict-comprehension:'bar = {i:open(i).read()for os.listdir('。')}'。對副作用的列表理解被認爲是不好的風格。最後,這不僅僅是py3k ......我不明白爲什麼它不能在py2k上工作。 – mgilson

+0

我在Python 2.7中測試它 - 它是一個列表理解;不是一個詞典的理解 – tMC

相關問題