2013-02-19 40 views
4

我在一個文件夾(名爲pos)中有100個txt文件。我想複製所有文件內容並將它們作爲行粘貼到Excel文件中。我發現了一些來自stackoverflow的代碼,但他們不工作。請幫幫我。如何讀取文件夾中的所有文本文件內容並將這些內容作爲行復制到一個excel文件中

import xlwt 
import os 
import glob 

wbk = xlwt.Workbook() 
sheet = wbk.add_sheet('data') 
path= 'C:\tweet\pos' 
row = 0 

for files in os.walk(path): 
...  for file in files: 
...   if fnmatch(file, '*.txt'): 
...    L = open(os.path.join(file), "r").read() 
...    sheet.write(row,5,L) 
...    row += 1 
...    

wbk.save('read_all_txt_in_folders.xls') 
+0

一個問題是'\ t'被解釋爲製表符。使用原始字符串:'r'C:\ tweet \ pos''或正斜槓:'C:/ tweet/pos'或者轉義反斜槓:'C:\\ tweet \\ pos' – bernie 2013-02-19 17:40:56

+1

什麼是「不工作「 意思?會發生什麼呢? – octern 2013-02-19 17:41:35

+0

您也正在導入'glob'但不使用它。並且沒有'fnmatch'的導入 – bernie 2013-02-19 17:42:48

回答

2

以下程序適用於我。

注:

  • '\t'被解釋爲一個標籤,而不是一個路徑定界符。嘗試使用正斜槓。
  • 它是import fnmatch/fnmatch.fnmatch(pattern, file)glob不是必需的。
  • 我不得不從字符串中刪除尾隨的換行符。在我的測試案例中,使用L[:-1]就足夠了。您可能需要更強大的解決方案。
  • os.walk()返回一個元組:(directory, subdirectories, files)
  • 我已經在註釋中留下了我的調試語句,以防他們幫助您。

import xlwt 
import os 
import fnmatch 

wbk = xlwt.Workbook() 
sheet = wbk.add_sheet('data') 
row = 0 

# sheet.write(1, 1, "Hello") 

for (dir, dirs, files) in os.walk('.'): 
    # print dir 
    for file in files: 
     # print " ", file 
     if fnmatch.fnmatch(file, '*.txt'): 
      L = open(os.path.join(dir, file), "r").read() 
      # print " ", L.__repr__() 
      a = sheet.write(row,5,L[:-1]) 
      # sheet.write(row, 4, "hello") 
      # print " ", a 
      row += 1 

wbk.save('read_all_txt_in_folders.xls') 
+0

P.對專家來說:是否有Pythonic表達式會產生所有'os.path.join(dir,file)'結果的列表或生成器? (例如'['./foo','./sub/bar','./sub/bar2','./sub2/bar']'? – 2013-02-19 18:02:25

+0

答案是:'(os.path.join (目錄,文件)的目錄,目錄,文件在os.walk('。')文件中的文件)'。請參閱http://stackoverflow.com/a/13051822/8747 – 2013-02-19 18:22:56

相關問題