假设我有一个biiig花园,而且我是一个总花痴,并且我每月保存一份csv文件文件夹,在其中跟踪我拥有的各种花及其在单个文件中的编号。并非每个月都有鲜花盛开,因此,如果要列出我拥有的所有鲜花文件的列表,它可能看起来像这样:
['Roses','Lilies','Tulips','Cornflowers','Sunflowers','Hydrangea','Daisies','Dahlias','Primroses','Hibiscus']
等(其中有很多个实际文件),但是三月的文件夹可能看起来像这样:
['Tulips','Primroses']
六月的文件夹可能如下所示:
['Roses','Primroses','Daisies','Dahlias','Hibiscus']
现在,我每个月都对这些文件进行相同的分析,因为我想看看我的花是如何生长的,我有哪些不同的颜色等等。但是我不想每次都要重做整个文件一个月以适合我特定文件夹中的花卉文件的子集-尤其是因为我有30多个文件。
因此,有没有一种简单有效的方法来告诉Python“看,这是我要从中加载数据,选择文件夹中的内容并进行加载的文件名库”,而无需创建任何文件来在那里并且不必编写30多个load语句吗?
我将非常感谢您的帮助!
答案 0 :(得分:0)
最简单的方法是使用os.listdir(directory)
列出每月目录的内容,并检查花朵名称是否在可接受的名称列表中:
import os
path = '/path/to/the/flower/directory'
flowers = ['Roses','Lilies','Tulips','Cornflowers','Sunflowers','Hydrangea','Daisies','Dahlias','Primroses','Hibiscus']
for file in os.listdir(path):
if file in flowers: # if the file name is in `flowers`
with open(path + file, 'r') as flower_file:
# do your analysis on the contents
不过,文件名需要与flowers
中的字符串完全匹配。我猜想文件名可能更像hydrangea.csv
,所以您可能想做一些额外的过滤,例如
flowers = ['roses','lilies','tulips','cornflowers']
for file in os.listdir(path):
# file has extension .csv and the file name minus the last 4 chars is in `flowers`
if file.endswith(".csv") and file[0:-4] in flowers:
with open(path + file, 'r') as flower_file:
# do your analysis on the contents
如果您的鲜花文件夹按日期(或任何其他分组)进行了组织,例如像这样:
/home/flower_data/
2018-04/
2018-05/
2018-06/
您可以从顶级path
目录执行以下操作:
path = '/home/flower_data'
# for every item in the directory
for subf in os.scandir(path):
# if the item is a directory
if subf.is_dir():
# for every file in path/subfolder
for file in os.listdir( subf.path ):
if file.endswith('.csv') and file[0:-4] in flowers:
# print out the full path to the file and the file name
fullname = os.path.join(subf.path, file)
print('Now looking at ' + fullname)
with open(fullname, 'r') as flower_file:
# analyse away!