2017-04-03 15 views
0

私のコードに問題があります。私は次のことをしたい:私は処理する必要が約30のCSVファイルがあり、私は1つのCSVファイルに結果をしたい。これまで私は次のコード(サンプル)を持っています:Pythonで複数のファイルを1つのコードで処理する

import pandas as pd 
import csv as csv 

df = pd.read_csv ("file.csv", 
        delimiter=",",skiprows=1) 

datamean10=df[61:240].mean() 
datamean15=df[241:420].mean() 

list10=[] 
list15=[] 

list10.append(datamean10.clip(0)) 
list15.append(datamean15.clip(0)) 

csvfile = "C:/Users/bla/bla/list10.csv" 
with open(csvfile, 'w') as output: 
    writer = csv.writer(output, lineterminator='\n') 
    writer.writerows(list10) 

csvfile = "C:/Users/bla/bla/list15.csv" 
with open(csvfile, 'w') as output: 
    writer = csv.writer(output, lineterminator='\n') 
    writer.writerows(list15) 

このコードは、1つのファイルに対して何をしたいのですか。私は、すべてのファイルを通過する別のスクリプトを書いた:

import sys, os 
for root, dir, files in os.walk('C:/Users/bla/bla/bla'): 
    for file in files: 
     if file.endswith('.csv'): 
      os.system ('averagelist.py {}'.format(root + '\\' + file)) 

言うまでもないが、このスクリプトは再びリストを削除し、私は同じリストに結果を追加したい一方で、空白のリストから始まり言うこと。結果として得られるファイルには、処理される各ファイルの平均値の行があります。誰かが私にこのことを教えることができますか?事前にどうもありがとうございました。

+0

2つの別々のスクリプトを使用する理由はありますか。なぜそれらを組み合わせないのですか? – acidtobi

+0

'open(csvfile、 'w')を出力として' os.walk'を上に置きます: 'os.system( 'averagelist.py {}')を置き換えてください。format(root + '\\' + file) ')を' csvfile = file 'で実行します。 (または: 'qith open(file ..)' – klaas

+0

私はそれらをどのように組み合わせるのですか? –

答えて

0

これは有効な組み合わせである必要があります。 Pythonスクリプトを呼び出すためにsystemを使用して

with open("C:/Users/bla/bla/list10.csv", 'w') as output: 
    pass 
with open("C:/Users/bla/bla/list15.csv", 'w') as output: 
    pass 


for root, dir, files in os.walk('C:/Users/bla/bla/bla'): 
    ... 

しかし:

import pandas as pd 
import csv as csv 

df = pd.read_csv ("file.csv", 
        delimiter=",",skiprows=1) 

datamean10=df[61:240].mean() 
datamean15=df[241:420].mean() 

list10=[] 
list15=[] 

list10.append(datamean10.clip(0)) 
list15.append(datamean15.clip(0)) 

csvfile = "C:/Users/bla/bla/list10.csv" 
with open(csvfile, 'w') as output: 
    writer = csv.writer(output, lineterminator='\n') 
    writer.writerows(list10) 

import sys, os 
for root, dir, files in os.walk('C:/Users/bla/bla/bla'): 
    for file in files: 
     if file.endswith('.csv'): 
      #csvfile = "C:/Users/bla/bla/list15.csv" 
      with open(file, 'w') as output: 
       writer = csv.writer(output, lineterminator='\n') 
       writer.writerows(list15) 
+0

実際には動作しません。コードでファイルをファイルごとに読み込み、すべてのファイルに対してコードを実行してから、 –

+0

最初に1つの出力ファイルを開き、そのファイルに追加します。以下のようにしてください: 'if file.endswith( '。csv'):'これが実行されますディレクトリツリーの「C:/ Users/bla/bla/bla」にあるすべての「csv」ファイル。 – klaas

0

ちょうど内側のスクリプト内で追加モードであなたの出力ファイルを開きます。

with open(csvfile, 'a') as output: 

とだけマスタースクリプトで、その後切り捨てます別のPythonスクリプトからは悪いです。私は、関数の中で、内部のスクリプトの作業部分を書き、それをインポートした後、外側スクリプトからそれを使用する方が良いでしょう:

インナースクリプト(averagelist.py)

import pandas as pd 
import csv as csv 

def average(file): 

    df = pd.read_csv (file, 
         delimiter=",",skiprows=1) 
    ...  
    with open(csvfile, 'w') as output: 
     writer = csv.writer(output, lineterminator='\n') 
     writer.writerows(list15) 

外側のスクリプト:

import os 
import averagelist 

with open("C:/Users/bla/bla/list10.csv", 'w') as output: 
    pass 
with open("C:/Users/bla/bla/list15.csv", 'w') as output: 
    pass 
for root, dir, files in os.walk('C:/Users/bla/bla/bla'): 
    for file in files: 
     if file.endswith('.csv'): 
      averagelist.average(root + '\\' + file)) 
関連する問題