循环浏览并重命名文件

时间:2019-04-05 00:21:26

标签: python pandas for-loop

我试图遍历一个包含标题为Spec01,Spec02,Speco03,...,Spec14的其他文件夹的文件夹。每个Spec文件夹中都有一些文件,但我需要的文件在每个文件夹中称为sample.dat。我想遍历每个文件夹,将其转换为Excel文件,并使用父文件夹的名称(即Spec ##)进行保存。

我的代码的pandas部分本身可以正常工作,但是当我添加for循环时,我最终只会得到一个名为[] .xlsx的文件。我相信我的循环只是在重写自己

这是我正在使用的代码


import pandas as pd
import os

your_path = 'C:/Users/abh85/Desktop/AAA/'
for root, dirs, files in os.walk(your_path):
    for subdir in files:
            if subdir.endswith('.dat'):
                with open(os.path.join(root, subdir)) as f1:
                    #change skiprow as needed
                    df = pd.read_csv(f1, sep='\s+', skiprows = 4, error_bad_lines = False) 
                    df = df.apply(pd.to_numeric, errors ='coerce')
                    df = df.dropna() #drop blank rows from coerce process
                    #manually change column names per test data acquisition
                    df.columns = ['Time (s)', 'Displacement (mm)', 'ExDisp (mm)', 'CMOD (mm)', 'Force (kN)']
                    df.to_excel('C:/Users/abh85/Desktop/xls/%s.xlsx' %dirs, index=False)

我知道重命名不起作用,因为我在循环中如何调用“ dirs”。以下代码为我提供了我想要的名称,但我不知道如何将其合并:

import os 

your_path = 'C:/Users/abh85/Desktop/AAA/'
for path, dirs, files in os.walk(your_path):
    for name in dirs:
        print(name)

我可以上传带有示例文件夹的zip。

1 个答案:

答案 0 :(得分:0)

所以,我想到了这个。我仍然是Python的新手,因此我不确定这是否是最有效的答案,但似乎可以解决问题:

import os

your_path = 'C:/Users/abh85/Desktop/AAA/'
file_names = []

i = 0

for root, dirs, files in os.walk(your_path):
    for name in dirs:
        file_names.append(name)


    for subdir in files:
            if subdir.endswith('.dat'):
                with open(os.path.join(root, subdir)) as f1:
            #change skiprow as needed
                          df = pd.read_csv(f1, sep='\s+', skiprows = 4, error_bad_lines = False) 
                          df = df.apply(pd.to_numeric, errors ='coerce')
                          df = df.dropna() #drop blank rows from coerce process
            #manually change column names per test data acquisition
                          df.columns = ['Time (s)', 'Displacement (mm)', 'ExDisp (mm)', 'CMOD (mm)', 'Force (kN)']
                          df.to_excel('C:/Users/abh85/Desktop/xls/%s.xlsx' %file_names[i], index=False)
                          i += 1