使用列表循环浏览文件

时间:2019-01-15 19:21:26

标签: python xlsx

我有一个带有伪目录(/usr/folder/)的文件,该文件看起来像这样:

target_07750_20181128.tsv.gz
target_07750_20181129.tsv.gz
target_07751_20181130.tsv.gz
target_07751_20181203.tsv.gz
target_07751_20181204.tsv.gz
target_27103_20181128.tsv.gz
target_27103_20181129.tsv.gz
target_27103_20181130.tsv.gz

我正在尝试将上述tsv文件连接到商店代码中的一个xlsx文件(在上面的文件名中找到)。

我正在阅读说file.xlsx并将其读为熊猫数据框。 我已经从file.xlsx中提取了商店代码,所以我有以下内容:

stores = instore.store_code.astype(str).unique()

输出:

07750
07751
27103

所以我的最终目标是遍历商店中的每个商店,并找到目录中对应的文件名。这是我到目前为止的内容,但似乎无法获得正确的文件名来打印:

import os

for store in stores:
    print(store)
    if store in os.listdir('/usr/folder/'):
        print(os.listdir('/usr/folder/'))

我期望看到的store_code in loop = '07750'的输出将是:

07750    
target_07750_20181128.tsv.gz
target_07750_20181129.tsv.gz

相反,我只看到返回的商店代码:

07750
07751
27103

我在这里做什么错了?

2 个答案:

答案 0 :(得分:1)

您的if语句失败的原因是它检查“ 07750”等是否为目录中的文件名之一,不是。您想要的是查看其中一个文件名中是否包含“ 07750”。

我会这样处理:

from collections import defaultdict
store_files = defaultdict(list)

for filename in os.listdir('/usr/folder/'):
    store_number = <some string magic to extract the store number; you figure it out>
    store_files[store_number].append(filename)

现在store_files将是一个字典,其中包含每个商店编号的文件名列表。

答案 1 :(得分:1)

问题是您假设要进行子字符串搜索-in在列表上的工作方式不是这样。例如,在第一次迭代中,您的if如下所示:

if "07750" in ["target_07750_20181128.tsv.gz",
               "target_07750_20181129.tsv.gz",
               "target_07751_20181130.tsv.gz",
               ...                            ]:

字符串“ 07755”不是该列表的元素。它的确显示为子字符串,但是in在列表上不起作用。相反,请尝试以下操作:

for filename in os.listdir('/usr/folder/'):
    if '_' + store + '_' in filename:
        print(filename)

有帮助吗?