Python:有没有一种方法可以提取和连接几个系列的文本文件,并在我继续操作时删除每个文件的前3行?

2024-09-27 07:34:27 发布

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

我有一个文件夹,其中包含几个系列的文本文件,每个文件都包含一行分析后的残差。它们的文件名如下:

'residual_x01'
'residual_x02'
...
'residual_y01'
'residual_y02'
...
'residual_z01'
'residual_z02'

文件的内容如下所示:

1 ### This is the file number in the series
c:\file\location\goes\here
983 1051 0 0 983 1051 ### other identifier
1.1 ### this is where the data I want starts
3.5
0.8
0.7
1.3
... ## so on for about a million lines.

使用Python,我想从这些文件中提取残差,连接为每个系列(即x、y、z)形成一个长文件,并在运行时删除每个文件的前三行,即形成以下内容:

1.1 ### data from first file of series 'residual_x01 / _y01 / _z01'
3.5
0.8
0.7
1.3
...
1.1 ### data from second file of series 'residual_x02 / _y02 / _z02'
3.5
0.8
0.7
1.3
...
1.1 ### data from third file of series 'residual_x03 / _y03 / _z03'
3.5
0.8
0.7
1.3
... ... and so on.

我不知道该怎么做,有人能帮忙吗


Tags: 文件ofthefromdatafileseriesx01
2条回答

你没有提供太多的数据,所以我做了一些伪造的数据。我不想制作一堆文件,所以我只制作了三个假数据文件,但是代码应该适用于任意数量的文件,并且每个文件的长度也可以是可变的

假设您有以下三个文本文件:

文件/residential_x01.txt

1
c:\file\location\goes\here
983 1051 0 0 983 1051
1.1
3.5
0.8
0.7
1.3

文件/residential_x02.txt

2
c:\file\location\goes\here
983 1051 0 0 983 1051
7.1
8.4
0.3
2.3
0.1

文件/残差_y01.txt

1
c:\file\location\goes\here
983 1051 0 0 983 1051
4.2
4.3
1.3
0.2
0.0

代码:

def get_file_lines(path_to_file):

    from itertools import islice

    number_of_lines_to_skip = 3

    with path_to_file.open("r") as file:

        _ = list(islice(file, number_of_lines_to_skip))
        for line in file:
            yield line.strip()


def get_all_floats(path_to_dir):

    from pathlib import Path

    for path in Path(path_to_dir).glob("residual_*.txt"):
        for line in get_file_lines(path):
            yield float(line)


def main():

    for f in get_all_floats("files/"):
        print(f)

    return 0


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

输出:

1.1
3.5
0.8
0.7
1.3
7.1
8.4
0.3
2.3
0.1
4.2
4.3
1.3
0.2
0.0
>>> 

对于每个系列,您可以使用以下代码创建一个包含所有文件行(每个文件的前3行除外)的文件:

filenames = ['residual_x01', 'residual_x02', ...]
output_file = 'path/to/output/residual_x'
lines_to_skip = 3
with open(output_file, 'w') as outfile:
    for fname in filenames:
        with open(fname) as infile:
            lines = infile.readlines()[lines_to_skip:]
            for line in lines:
                outfile.write(line)

根据您的需要更改filenames列表和output_file。还可以调整lines_to_skip变量

相关问题 更多 >

    热门问题