我有一个带有伪目录(/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
我在这里做什么错了?
答案 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)
有帮助吗?