如何使用 Python 使用管道分隔符拆分文本文件,然后根据条件选择列?

Posted

技术标签:

【中文标题】如何使用 Python 使用管道分隔符拆分文本文件,然后根据条件选择列?【英文标题】:How to split text file with Pipe delimiter using Python and then pick columns based on condition? 【发布时间】:2021-12-31 22:53:05 【问题描述】:

尝试拆分文本并根据第二列选择数据:

Attribute1|Number|7
Attribute2|Text||"sample text"
Attribute3|Columns|4||"data1"|"data2"|"data3"|"data4"

如果它显示数字,那么它应该在第三个字段中选择数据。 如果它显示文本,那么它应该在第四个字段中选择数据。 如果它说 Columns 那么它必须根据第三个字段创建一些列。

最终数据应该在这样的数据框中:

         Col_1          Col_2
    Attribute1_value    7
    Attribute2_value    "sample text"
    Attribute3_value_0  data1
    Attribute3_value_1  data2
    Attribute3_value_2  data3
    Attribute3_value_3  data4

【问题讨论】:

您目前如何尝试拆分文本? 输入数据具有连续的文本行并根据条件拆分?@DarkKnight @DarkKnight 根据管道分隔符拆分 【参考方案1】:

您可以将拆分的行存储在字典中并从中制作一个系列:

output_dict = 
with open("file.txt", "r") as f:
    while True:
        line = f.readline()
        if not line:
            break
        fields = line.strip("\n").split('|')
        if fields[1] == "Number":
            output_dict[fields[0]] = fields[2]
        elif fields[1] == "Text":
            output_dict[fields[0]] = fields[3]
        elif fields[1] == "Columns":
            output_dict[fields[0]] = fields[4:4 + int(fields[2])]

#print(output_dict)

series = pd.Series(output_dict)
print(series.explode())

输出:

Attribute1                7
Attribute2    "sample text"
Attribute3          "data1"
Attribute3          "data2"
Attribute3          "data3"
Attribute3          "data4"

【讨论】:

以上是关于如何使用 Python 使用管道分隔符拆分文本文件,然后根据条件选择列?的主要内容,如果未能解决你的问题,请参考以下文章

如何阅读管道分隔线 |来自一个文件并在两个不同的 ArrayList 中拆分整数

基于SQL Server中的分隔符将文本拆分为多列

Python 拆分文本

如何基于多个空格字符将文本文件拆分为 2 列作为 scala spark 的分隔符

如何使用管道分隔符导出到 .csv

使用 String.split() 将带有引号的 csv 文件拆分为文本分隔符