我试图遍历一个包含标题为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。
答案 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