Python 使用列表在文件中循环

Python 使用列表在文件中循环,python,xlsx,Python,Xlsx,我有一个带有伪目录(/usr/folder/)的文件夹,其中的文件如下所示: target\u 07750\u 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 targ

我有一个带有伪目录(
/usr/folder/
)的文件夹,其中的文件如下所示:

target\u 07750\u 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文件(可以在上面的文件名中找到)

我正在读say 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/'))
对于say
store\u code in loop='07750'
,我希望看到的输出是:

07750
target_07750_20181128.tsv.gz
target_07750_20181129.tsv.gz
相反,我只看到返回的商店代码:

07750
07751
27103

我在这里做错了什么?

if语句失败的原因是它检查“07750”etc是否是目录中的文件名之一,而不是。您想要的是查看其中一个文件名中是否包含“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)
if "07750" in ["target_07750_20181128.tsv.gz",
               "target_07750_20181129.tsv.gz",
               "target_07751_20181130.tsv.gz",
               ...                            ]:
从集合导入defaultdict
store_files=defaultdict(列表)
对于os.listdir(“/usr/folder/”)中的文件名:
门店号=
存储文件[存储文件编号].追加(文件名)

现在,
store\u files
将是一个字典,其中包含每个门店编号的文件名列表。

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

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)
if "07750" in ["target_07750_20181128.tsv.gz",
               "target_07750_20181129.tsv.gz",
               "target_07751_20181130.tsv.gz",
               ...                            ]:
字符串“07755”不是该列表的元素。它确实显示为子字符串,但是
中的
在列表中不起作用。相反,请尝试以下方法:

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

这有帮助吗?

你得到了什么请看我的编辑@vicroboti如果你运行这个,
df=pd.read\u csv('target\u 07750\u 20181128.tsv.gz',compression='gzip',delim\u whitespace=True)
…它有效吗?你能在那之后打印
df.head()
吗?@coldspeed谢谢你的建议,但我甚至还没有尝试读取tsv文件,我只是想在阅读之前找到我目录中需要的文件。但是它们是压缩的,所以如果你想合并它们,一种方法是读取并连接它们,然后保存回来。虽然这看起来很接近OP想要的,但如果一个有效的存储代码碰巧也出现在日期中,这也有点危险。比如说,如果有一家商店“8113”,我知道其中的危险性——但是,它符合OP代码的逻辑。不过,更新会有帮助…我不需要也循环存储代码吗?是的--我不会替换您的外部循环,因为这不需要修复。