首先,我想创建一个函数来读取文件夹中的每个文件,删除扩展名,将它们附加到一个空列表中并打印前十个条目。
def directory_contents(directory):
import os
dl = os.listdir(directory)
files = []
for file in dl:
filename = os.path.splitext(file)
files.append(filename[0])
print(files[:10])
接下来,我将每个文件名分成几个单独的部分,并将它们放入单独的列表中。我将遍历每个文件,并将文件名的每个部分附加到适当的列表中。最后,我将合并每个列表以创建一个DataFrame /表。
def split_filename(directory):
import os
dl = os.listdir(directory)
Index_0 = []
Index_1 = []
Index_2 = []
Index_3 = []
Index_4 = []
for file in dl:
filename = os.path.splitext(file)
no_ext = filename[0].split('_')
i_0 = no_ext[0]
i_1 = no_ext[1]
i_2 = no_ext[2]
i_3 = no_ext[3]
i_4 = no_ext[4]
Index_0.append(i_0)
Index_1.append(i_1)
Index_2.append(i_2)
Index_3.append(i_3)
Index_4.append(i_4)
print(Index_0[:10])
print(Index_1[:10])
print(Index_2[:10])
print(Index_3[:10])
print(Index_4[:10])
如您在上面的函数中看到的,我创建了一个空列表来保存文件名的每个部分,然后按其索引进行拆分。前循环循环访问目录(dl)中的每个文件,并使用splittext()方法删除文件扩展名。然后,我使用创建的第一个索引,但使用splitext,因为它包含我要再次拆分以访问每个部分的信息。然后,带有下划线的split()方法将文件名分成单独的部分,并另存为单独的变量。接下来,我们将每个变量附加到适当的列表中,并在完成所有操作后打印该列表。
让我们定义目录,看看函数的输出是什么。
directory = './Test/Data/'
directory_contents(directory)
输出: [ 'f0_f1_f2_f3_f4', 'd0_d1_d2_d3_d4', 'i0_i1_i2_i3_i4', 'j0_j1_j2_j3_j4', 'b0_b1_b2_b3_b4', 'e0_d1_d2_d3_d4', 'g0_g1_g2_g3_g4', 'h0_h1_h2_h3_h4', 'a0_a1_a2_a3_a4', 'c0_c1_c2_c3_c4']
那很好。现在,让我们看看它是否可以在包含我要分析的文件的文件夹中工作。
directory = './WBV/database/WBV/cmj/pre/0 Hz/'
directory_contents(directory)
输出: [ 'P05_0Hz_Pre_CMJ_T02', 'P24_0Hz_Pre_CMJ_T03', 'P17_0Hz_Pre_CMJ_T01', 'P19_0Hz_Pre_CMJ_T01', 'P14_0Hz_Pre_CMJ_T02', 'P13_0Hz_Pre_CMJ_T02', 'P02_0Hz_Pre_CMJ_T01', 'P26_0Hz_Pre_CMJ_T01', 'P14_0Hz_Pre_CMJ_T01', 'P06_0Hz_Pre_CMJ_T02']
那很好,它读取文件夹中的所有文件,而不是按数字顺序。让我们看看它是否可以拆分所有文件名。
split_filename(directory)
输出:
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-22-392a30f7485a> in <module>()
----> 1 split_filename(directory)
<ipython-input-17-d53a23fcf079> in split_filename(directory)
15 i_0 = no_ext[0]
16 i_1 = no_ext[1]
---> 17 i_2 = no_ext[2]
18 i_3 = no_ext[3]
19 i_4 = no_ext[4]
IndexError: list index out of range
在这里事情不再有意义。当文本文件夹和研究文件夹中的文件名具有相同格式时,为什么会引发索引错误?让另一个函数列出一个文件名各部分的索引。
import os
fn = os.path.splitext('./WBV/database/WBV/cmj/pre/0 Hz/P05_0Hz_Pre_CMJ_T02.exp')
f0 = fn[0].split('_')
for i in f0:
print(f0.index(i), i)
输出: 0 ./WBV/数据库/ WBV / cmj / pre / 0 Hz / P05 1 0Hz 2前 3厘米 4 T02
除了文件路径是第一个索引的一部分外,它还指出“ Pre”位于索引2。那么为什么在调用索引2时为什么抛出错误?任何有关如何解决此错误的建议将不胜感激。
答案 0 :(得分:0)
您的代码对我来说似乎是正确的。
我建议更改directory_contents函数以显示所有内容,而不仅显示前十个内容,因此您可以检查隐藏文件。如果您使用的是Windows,则文件夹中可能会包含一些隐藏的desktop.ini
,这些文件将列在os.listdir()
中。当然,这不能与您的程序配合使用...
如果这没有帮助,请在您的for循环中添加一个print(no_ext)
,以查看实际导致该错误的文件名。 (您的打印功能位于代码的最后,因此错误可以出现在列表中的任何位置,而不必在第一个条目上显示!)