使用python,基于excel表格内容,循环读取文件夹下所有文件名,并提取指定所需文件

大家好,我刚学习python不久,现遇到一个python问题想请教一下是否可以实现,以及实现的步骤。

问题:我需要基于一个excel表中的信息,从13万个企业年报txt文件中提取出想要的那一部分文件。想请教一下是否可以实现,以及实现的步骤。

详细描述:这些文件按时间分别位于20个文件夹中,每个文件夹下设4个子文件夹。每个文件的文件名是这样的“20060403_10-K_edgar_data_790708_0001193125-06-071338_1”,其中,“0001193125”是企业的cik代码,也就是识别码。我有一个excel表,里面有所需样本企业的全部cik代码,大概8000个。

想问一下可否根据将这些代码输入进python,让python循环读取每个文件夹中,文件名内包括所需cik代码的txt文件,并把它们都提取出来放入一个新的文件夹中。而且,不知道python可否从一长串文件名中读取特定的字符串,比如从20060403_10-K_edgar_data_790708_0001193125-06-071338_1里面找有没有0001193125字样。通过在论坛内的搜索,暂未发现类似问题,搜索结果大多是提取文件名到excel,提取所有文件。因此我对步骤的猜测是,先提取文件名到excel,再通过excel中剩下的文件名通过python去和文件夹中的文件匹配和提取,但是还是绕不过循环读取和匹配的问题,而且感觉这种猜测属于冗余的步骤。

因此想请教上述过程如果可以实现,大概每个步骤都需要做什么?我可以按照每一步所需要做的事情挨个搜索代码自行改动,知道论坛中不允许直接要源代码。

谢谢大家,辛苦了!

循环读取文件夹下所有文件名是

# 读取"E:\xxx"文件夹下所有txt文件
import os

path=r"E:\xxx"
for root, dirs, files in os.walk(path):
    for fn in files:
        if fn.endswith(".txt"):
            file_path = os.path.join(root,fn)
            print("文件:",file_path)

从20060403_10-K_edgar_data_790708_0001193125-06-071338_1里面找有没有0001193125字样, 这样判断即可

fn = "20060403_10-K_edgar_data_790708_0001193125-06-071338_1"
if "0001193125" in fn:
    print("有0001193125字样")
else:
    print("没有0001193125字样")

如果“20060403_10-K_edgar_data_790708_0001193125-06-071338_1”中cik代码的位置是固定。要提取cik代码可以用字符串切片

fn = "20060403_10-K_edgar_data_790708_0001193125-06-071338_1"
print(fn[32:42])

具体代码参考

import os
import pandas as pd
import shutil
# 读取样本全部cik代码excel表到ciklist列表中
df = pd.read_excel('xxx.xlsx')
ciklist = list(map(str,df['列名1'].tolist()))
print(ciklist)
# 读取"E:\xxx"文件夹下所有txt文件
path=r"E:\xxx"
for root, dirs, files in os.walk(path):
    for fn in files:
        if fn.endswith(".txt"):
            if fn[32:42] in ciklist:  #提取cik代码并判断是否在ciklist列表中
                file_path = os.path.join(root,fn)
                print("文件:",file_path)
                # 把file_path放入新文件夹中
                shutil.copy(file_path,r"E:\xxx2")

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img