从 .txt 文件中拆分特定值并存储在 python 中的 excel 中?

Posted

技术标签:

【中文标题】从 .txt 文件中拆分特定值并存储在 python 中的 excel 中?【英文标题】:Split the particular value from .txt file and store on excel in python? 【发布时间】:2021-06-23 05:48:39 【问题描述】:

我在文本文件 (val.txt) 中存储了大量 温度湿度 值。我需要在单独的列中存储到 Excel 工作表中。

val.txt 文件中的值:

SHT1 E:   T1:30.45°C    H1:59.14 %RH
SHT2 S:   T2:29.93°C    H2:67.38 %RH

SHT1 E:   T1:30.49°C    H1:58.87 %RH
SHT2 S:   T2:29.94°C    H2:67.22 %RH

SHT1 E:   T1:30.53°C    H1:58.69 %RH
SHT2 S:   T2:29.95°C    H2:67.22 %RH
//its continues same like this//

预期输出(在 excel 表中):

Column1 (T1)     Column2 (H1)     Column3 (T2)     Column3 (H2)
30.45            59.14            29.93            67.38
30.49            58.87            29.94            67.22  
30.53            58.69            29.95            67.22

【问题讨论】:

您应该可以使用pandas 来执行此操作,如here 所述 太棒了。但听说我也有字符串。我只需要 grep 浮点值。 【参考方案1】:

我建议使用 pandas 进行类似的操作

import itertools

import pandas as pd


def read_lines(file_object) -> list:
    return [
        parse_line(line) for line in file_object.readlines() if line.strip()
    ]


def parse_line(line: str) -> list:
    return [
        i.split(":")[-1].replace("°C", "").replace("%RH", "")
        for i in line.strip().split()
        if i.startswith(("T1", "T2", "H1", "H2"))
    ]


def flatten(parsed_lines: list) -> list:
    return list(itertools.chain.from_iterable(parsed_lines))


def cut_into_pieces(flattened_lines: list, piece_size: int = 4) -> list:
    return [
        flattened_lines[i:i + piece_size] for i
        in range(0, len(flattened_lines), piece_size)
    ]


with open("your_text_data.txt") as data:
    df = pd.DataFrame(
        cut_into_pieces(flatten(read_lines(data))),
        columns=["T1", "H1", "T2", "H2"],
    )
    print(df)
    df.to_excel("your_table.xlsx", index=False)

输出:

      T1     H1     T2     H2
0  30.45  59.14  29.93  67.38
1  30.49  58.87  29.94  67.22
2  30.53  58.69  29.95  67.22

编辑:

regex 的方法要短得多。

import re

import pandas as pd

with open("your_text_data.txt") as data_file:
    data_list = re.findall(r"\d\d\.\d\d", data_file.read())

pd.DataFrame(
    [data_list[i:i + 4] for i in range(0, len(data_list), 4)],
    columns=["T1", "H1", "T2", "H2"],
).to_excel(
    "your_table.xlsx",
    index=False,
)

但是,这不会向stdout 打印任何内容,而是生成与以下相同的 Excel 文件结构。

作为.xlsx 文件:

【讨论】:

以上是关于从 .txt 文件中拆分特定值并存储在 python 中的 excel 中?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以直接从存储在 S3 上的 zip 文件中读取特定文件?

Opencv读取图片像素值并保存为txt文件

是否可以在 LINQ 查询中拆分值并添加 if 条件?

如何从存储在文件中的表中获取特定索引

从 S3 读取大型 JSON 文件 (3K+) 并从数组中选择特定键

在 C++ 中用字符串和 int 解析(拆分)一个 txt 文件