2017-04-14 37 views
1

我對Python一般來說很新,但我試圖製作一個腳本,它從文件夾中的某些文件獲取數據並將其放入Excel電子表格中。使用熊貓read_table和文件列表

我所擁有的代碼會在我指定的文件夾中找到所需的文件類型,然後用完整的文件路徑創建一個列表。

import os 
file_paths = [] 

for folder, subs, files in os.walk('C://Users/Dir'): 
    for filename in files: 
     if filename.endswith(".log") or filename.endswith(".txt"): 

       file_paths.append(os.path.abspath(os.path.join(folder,filename))) 

它也將採取一個特定的文件路徑,從正確的列中提取數據,並將其放入正確的單元格中的excel。

import pandas as pd 
import numpy 

for i in range(len(file_paths)): 
    fields = ['RDCR'] 
    data = pd.read_table(file_paths[i], sep= "\s+", names = fields, usecols=[3], 

如果我無法通過我的文件列表製作read_table迭代,並把數據到Excel表格中,每一個時間讀取它移過一列在電子表格中的新文件。

理想情況下,for循環會查看file_paths列表的長度,並將其用作範圍。然後它將使用file_paths [i]將文件名逐個輸入到read_table中。

發生什麼是它發現file_paths的長度,而不是逐個遍歷文件,它只是輸入列表中最後一個文件的數據。

任何幫助將不勝感激!謝謝!

回答

3

嘗試一次連接所有這些文件並寫入excel一次。

from glob import glob 
import pandas as pd 

files = glob('C://Users/Dir/*.log') + glob('C://Users/Dir/*.txt') 

def read_file(f): 
    fields = ['RDCR'] 
    return pd.read_table(
     f, sep="\s+", 
     names=fields, usecols=[3]) 

df = pd.concat([read_file(f) for f in files], axis=1).to_excel('out.xlsx') 
+0

謝謝您的建議。我用你有的代碼修改了一些東西,它非常乾淨! –

+0

然後最後一個問題:我從數據庫導入數據的文件有時會在不同的行上開始數字表。有什麼辦法可以告訴python在第一行使用數字而不是特定的行來啓動列嗎?這樣它可以解釋我想要的數據位置的變化。 –

+0

@JohnZilverberg我建議問一個不同的問題。這對單獨回答會很有幫助。 – piRSquared