我使用Python 3.5来分析csv文件中包含的数据。这些文件包含在“figs”目录中,该目录包含在案例目录中,该目录包含在整个数据目录中,例如:
/ strm1 /塞里诺/ DATA / 06052009 /无花果
或更一般地说:
/ strm1 /塞里诺/ DATA /的 case_date_in_MMDDYYYY /无花果
我开始的目录是'/ strm1 / serino / DATA /,',每个子目录是我正在处理的案例的月,日和年。每个子目录包含另一个名为“figs”的子目录,它是每个案例的csv文件的位置。确切地说:
/ strm1 /塞里诺/ DATA /的 case_date_in_MMDDYYYY /无花果/的 case_date_in_MMDDYYYY 的.csv
所以,我想从我的DATA目录开始,浏览它的子目录,找到那些有MMDDYYYY命名的子目录。但是,某些案例目录可能在末尾以州名缩写命名,例如:'06052009_TX。因此,与确切地匹配MMDDYYYY命名不同,它可以像验证目录名称包含任何数字1到9一样简单。
一旦我进入第一个子目录(案例目录),我想进入'figs'子目录。在那里,我想访问具有与第一个子目录(案例目录)相同的命名约定的csv文件。我将使用每个csv文件中包含的数据填充现有数组。
基本上,我的问题涉及浏览符合某个命名约定的多个子目录,并最终访问“end”的数据文件。我天真地玩弄了glob,fnmatch,os.listdir和os.walk,但我无法得到任何足够接近工作的东西,我觉得这样做会有所帮助。我对这些模块不太熟悉。我可以包括的是我想要的:
for dirs in data_dir that contain a number:
go into this directory
go into 'figs' directory
read data from the csv file whose name matches its case directory name (or whose name format matches the case directory name format)
我遇到过相关问题,但我无法以我想要的方式应用他们的答案,尤其是嵌套目录。我非常感谢你的帮助,如果我需要澄清任何事情,请告诉我。
答案 0 :(得分:0)
您列出了上述几个问题。你坚持哪一个?您似乎已经知道如何使用os.path
导航文件存储系统。您可能不知道函数os.path.join()
,它允许您手动指定相对于文件的文件路径:
os.path.abspath(os.path.join(os.path.dirname(__file__), '../..', 'Data/TrailShelters/'))
要打破上述情况:
os.path.dirname(__file__)
返回当前文件的路径。 '../..'
表示:在文件夹层次结构中上升两级。 Data/TrailShelters/
是我希望导航到的目录。
这如何适用于您的特定情况?好吧,您需要进行一些调整,但是您可以将父目录的os.path
存储在变量中。然后,您基本上可以使用while sub_dir is not null
循环来遍历子目录。对于每个子目录,您需要检查其os.path
并提取您感兴趣的路径的特定部分。然后您可以使用类似:if 'TN' in subdirectory_name
的内容来确定它是否是您感兴趣的子目录如果是的话然后通过将路径附加到子目录来更新父目录的已保存os.path
。这有什么意义吗?
答案 1 :(得分:0)
以下内容应该让你前进。它使用parts:/[21ba]+/
函数尝试将每个文件夹名称转换为有效的datetime.strptime()
对象。如果转换失败,则表示文件夹名称格式不正确,可以跳过。然后,它会尝试解析在相应的datetime
文件夹中找到的任何CSV文件:
fig