qq_52091435 2022-01-29 22:30 采纳率: 83.3%
浏览 182

使用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去和文件夹中的文件匹配和提取,但是还是绕不过循环读取和匹配的问题,而且感觉这种猜测属于冗余的步骤。

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

谢谢大家,辛苦了!

  • 写回答

1条回答 默认 最新

  • 关注

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

    # 读取"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

    评论 编辑记录

报告相同问题?

问题事件

  • 修改了问题 1月29日
  • 创建了问题 1月29日

悬赏问题

  • ¥20 Python安装cvxpy库出问题
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥15 python天天向上类似问题,但没有清零
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题