如何在一个循环中导入多个.txt文件而不进行连接?

2024-04-25 19:11:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我在.txt(空格分隔)中有许多(>;40)数据文件,它们具有相同的布局,我想读入python进行数据处理和打印。这些文件是一个参数的参数扫描的模型输出,该扫描在每个数据文件中占据一列。参数在每个连续文件中递增到下一个值。你知道吗

我遇到的问题是,我不知道如何编写for循环来将每个数据文件读入自己的数据帧。你知道吗

我看到了很多答案熊猫.read\u csv'然后是连接,但是我不想将文件连接到一个数据帧中,因为我想分别绘制每个数据集。 对我来说,仅仅依靠连接一个数据帧来分离数据集是没有意义的。你知道吗

import glob
import os
import pandas as pd
from pandas import Series, DataFrame

path = r'D:/user/data-folder/'

files = glob.glob(os.path.join(path + 'data-*.txt')) # Added based on suggestions from similar questions
df1 = []
for f in files:
    df = pd.read_csv(path1 + f,
         sep=' '
         )
    df1.append(df)

print(df1)

理想情况下,我希望将每个数据文件读入它自己的数据帧中,以递增的方式编号,例如“df1\u 1”、“df1\u 2”等。 然后,我可以单独操作每个数据帧,并将数据绘制出来进行比较。你知道吗


Tags: 文件csv数据pathimporttxtpandasfor
2条回答

使用pathlib替换os&;glob

from pathlib import Path

获取文件

data_path = Path(r'D:/user/data-folder')
data_files = data_path.glob('data-*.txt')

将它们存储在dict

df_dict = dict()
for i, file in enumerate(data_files):
    df_dict[f'df_{i}'] = pd.read_csv(file, sep=' ')

回忆DataFrame

df_dict['df_1']

绘图DataFrames

for value in df_dict.values():
    value.plot()

数据帧列表呢?如果您有:

。/data/a.txt:

firstname,lastname,hobby
niles,crane,wine tasting
martin,crane,sitting in recliner
bob,bulldog,being annoying

。/data/b.txt:

firstname,lastname,hobby
john,doe,doing stuff
jane,doe,being anonymous
humphrey,bogart,smoking and drinking

代码:

def main():

    from glob import glob
    from os.path import join
    import pandas as pd
    from pandas import DataFrame
    from contextlib import ExitStack

    local_path = "data/"

    filenames = glob(join(local_path + "*.txt"))

    with ExitStack() as context_manager:
        files = [context_manager.enter_context(open(filename, "r")) for filename in filenames]

        dataframes = []
        for file in files:
            dataframe = pd.read_csv(file)
            dataframes.append(dataframe)

        print(dataframes[0], end="\n\n")
        print(dataframes[1])

    return 0


if __name__ == "__main__":
    import sys
    sys.exit(main())

输出:

  firstname lastname                hobby
0     niles    crane         wine tasting
1    martin    crane  sitting in recliner
2       bob  bulldog       being annoying

  firstname lastname                 hobby
0      john      doe           doing stuff
1      jane      doe       being anonymous
2  humphrey   bogart  smoking and drinking

相关问题 更多 >