2017-04-14 3 views
1

私は一般的にPythonの新機能ですが、フォルダ内の特定のファイルからデータを取り出してExcelスプレッドシートに入れるスクリプトを作成しようとしています。ファイルリストを含むPandasの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))) 

また、特定のファイルパスを使用して、正しい列からデータを取り出し、正しいセルに入れます。私はトラブルのファイルの私のリストをread_table反復処理を行うこととするたびに、それがスプレッドシート内の1つのカラムに移動し、新しいファイルを読み込み、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], 

理想的には、forループはfile_pathsリストの長さを確認し、それを範囲として使用します。次に、file_paths [i]を使用してファイル名をread_tableに1つずつ入力します。

何が起こるかは、file_pathsの長さを見つけ、それを1つずつ順番に繰り返すのではなく、リストの最後のファイルからデータを入力するだけです。

ご協力いただければ幸いです。ありがとうございました!

答えて

3

一度にすべてを連結して、1回書き込んでみてください。

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

関連する問題