从子文件夹和文件夹中读取文本文件,并在大熊猫中为每个文件文本创建一个数据框,以作为一种观察

时间:2018-07-24 06:33:59

标签: python pandas

我在文件夹和子文件夹中具有以下文本文件的体系结构。

我想全部阅读它们并创建一个df。我正在使用此代码,但对我而言效果不佳,因为文本不是我检查的内容,文件也不等同于我的计数。

folders- level 1 files in first folder and so on

l = [pd.read_csv(filename,header=None, encoding='iso-8859-1') for filename in glob.glob("2018_01_01/*.txt")]
main_df = pd.concat(l, axis=1)
main_df = main_df.T
for i in range(2):
    l = [pd.read_csv(filename, header=None, encoding='iso-8859-1',quoting=csv.QUOTE_NONE) for filename in glob.glob(str(foldernames[i+1])+ '/' + '*.txt')]
    df = pd.concat(l, axis=1)
    df = df.T
    main_df = pd.merge(main_df, df)

file

2 个答案:

答案 0 :(得分:4)

假定这些目录包含txt文件,其中所有信息的结构相同:

import os
import pandas as pd

df = pd.DataFrame(columns=['observation'])

path = '/path/to/directory/of/directories/'

for directory in os.listdir(path):
    if os.path.isdir(directory):
        for filename in os.listdir(directory):
            with open(os.path.join(directory, filename)) as f:
                observation = f.read()
                current_df = pd.DataFrame({'observation': [observation]})
                df = df.append(current_df, ignore_index=True)

所有文件都经过迭代后,df应该是DataFrame,其中包含不同txt文件中的所有信息。

答案 1 :(得分:1)

您可以使用for循环来实现。但在此之前,您需要为所有文件(如“ fol_0”中的“ fil_0”,“ fol_1”中的“ fil_1”,“ fol_2”中的“ fil_2”等)赋予所有文件以序列名称。这样可以方便地使用for循环:

dataframes = []
import pandas as pd
for var in range(1000):
    name  = "fol_" + str(var) + "/fil_" + str(var) + ".txt"
    dataframes.append(pd.read_csv(name)) # if you need to use all the files at once
    #otherwise
    df = pd.read_csv(name) # you can use file one by one

它将为每个文件自动创建数据框。