2017-04-03 77 views
0

我的代碼有些問題。我想要做到以下幾點:我有大約30個csv文件,我需要處理,我希望將結果放在一個csv文件中。到目前爲止,我有以下代碼(示例):使用一個代碼在Python中處理多個文件

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) 

因此,此代碼做我想要的單個文件。我寫了另一個腳本要經過的所有文件:

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

是否有理由有兩個單獨的腳本,你爲什麼不結合他們? – acidtobi

+0

只需將'os.walk'放在'open(csvfile,'w')作爲輸出:'並替換'os.system('averagelist.py {}'.format(root +'\\'+文件))'''csvfile = file'。 (或者說:'qith open(file ..)' – klaas

+0

如何合併它們? –

回答

0

這應該是一個工作組合。

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

首先打開ONE輸出文件並追加到該文件中,只需將以下所需的所有內容放在一起:'if file.endswith('。csv'):'this will be executed for每個「csv」文件在目錄樹中看到:'C:/ Users/bla/bla/bla'。 – klaas

0

追加模式只要打開你的輸出文件內腳本里面:

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

,只有在主腳本然後截斷:

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'): 
    ... 

但使用system調用Python腳本從另一個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))