合并具有与数据框相似的名称约定的文件

发布于 2021-01-29 15:03:38

我有一个存储在目录中的文件列表,例如

filenames=[
        abc_1.txt
        abc_2.txt
        abc_3.txt

        bcd_1.txt
        bcd_2.txt
        bcd_3.txt
       ]

pattern=[abc]

我想将多个txt文件读入一个数据帧,以便所有以abc开头的文件都在一个数据帧中,然后所有的所有文件名都以bcd等开头。

我的代码:

file_path = '/home/iolie/Downloads/test/'
filenames = os.listdir(file_path)


prefixes = list(set(i.split('_')[0] for i in filenames))

for prefix in prefixes:
    print('Reading files with prefix:',prefix)
    for file in filenames: 
        if file.startswith(prefix):
            print('Reading files:',file)
            list_of_dfs = [pd.concat([pd.read_csv(os.path.join(file_path, file), header=None) ],ignore_index=True)]
            final = pd.concat(list_of_dfs)

这段代码不会追加,但会覆盖数据框。有人可以帮忙吗?

关注者
0
被浏览
69
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    比创建任意数量的未链接数据帧更好的主意是输出一个 数据帧字典 ,其中的键是前缀:

    from collections import defaultdict
    
    filenames = ['abc_1.txt', 'abc_2.txt', 'abc_3.txt',
                 'bcd_1.txt', 'bcd_2.txt', 'bcd_3.txt']
    
    dd = defaultdict(list)
    
    for fn in filenames:
        dd[fn.split('_')[0]].append(fn)
    
    dict_of_dfs = {}
    for k, v in dd.items():
        dict_of_dfs[k] = pd.concat([pd.read_csv(fn) for fn in v], ignore_index=True)
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看