2017-04-03 42 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))