包含多列的文本文件的最大值

2024-10-01 17:22:01 发布

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

在做了一些计算之后,我得到了一个文本文件,格式如下:

word1 word2 0.1111 hyp1 hyp2 0.1111111111111111
word3 word4 0.2 hyp3 hyp4 0.07692307692307693
word5 word6 0.2 hyp5 hyp6 0.3333333333333333

所以这有6列,两个单词有一个值,然后旁边的两个超词有一个值。你知道吗

我的目标是获得前10个最大值对并写入文件(而不是我正在努力的部分)

我的问题是,我应该采取什么方法,使它查看第3列和第6列,然后将文件中的第1、2、3或4、5、6列放入一个文件中..因此,我可能会得到一个如下所示的文本文件:

chapter tom 0.08333333333333333 section black 0.1
answer tom 0.09090909090909091 statement black 0.1111111111111111
boy wonder 0.08333333333333333 man astonishment 0.09090909090909091
tom answer 0.09090909090909091 turkey statement 0.058823529411764705
old lady 0.08333333333333333 past woman 0.1
pulled spectacle 0.1111111111111111 tear sight 0.1111111111111111

Tags: 文件answer格式statementblack文本文件tomword1
3条回答

试试看:

import re


data = [
    "word1 word2 0.1111 hyp1 hyp2 0.1111111111111111",
    "word3 word4 0.2 hyp3 hyp4 0.07692307692307693",
    "word5 word6 0.2 hyp5 hyp6 0.3333333333333333"]

pattern = r"^(\S+\s\S+\s\d+.\d+)\s(\S+\s\S+\s\d+.\d+)$"
pairs = []
for line in data:
    match = re.match(pattern, line)
    pairs.append(match.group(1).split())
    pairs.append(match.group(2).split())

for pair in pairs:
    print(pair)

print("======")

pairs.sort( key=lambda value: float(value[2]))

for pair in pairs:
    print(pair)

输出:

['word1', 'word2', '0.1111']
['hyp1', 'hyp2', '0.1111111111111111']
['word3', 'word4', '0.2']
['hyp3', 'hyp4', '0.07692307692307693']
['word5', 'word6', '0.2']
['hyp5', 'hyp6', '0.3333333333333333']
======
['hyp3', 'hyp4', '0.07692307692307693']
['word1', 'word2', '0.1111']
['hyp1', 'hyp2', '0.1111111111111111']
['word3', 'word4', '0.2']
['word5', 'word6', '0.2']
['hyp5', 'hyp6', '0.3333333333333333']

排序后,您可以将此数据写入文件:

with open('new_file_name', 'w') as new_file:
    for pair in pairs:
        new_file.write(' '.join(pair))

将文件加载到数据帧中:

import pandas as pd
df = pd.read_csv('input.txt', sep=' ', header=None)

将数据帧拆分为两个数据帧df_left(前三列)和df_right(后三列):

df_left = df.iloc[:, :3]
df_right = df.iloc[:, 3:]

df_left下面附加df_right。请注意,我们需要重命名其中一个数据帧的列,以便append正常工作:

df_right.columns = [0, 1, 2]
df = df_left.append(df_right)

按最后一列(即第2列)中的值对数据帧进行降序排序:

df = df.sort_values(2, ascending=False)

最后,将数据帧保存到文件:

pd.to_csv('output.txt', sep=' ', header=None, index=None)

这是我的解决办法

import re

def my_sort(val):
    pattern = r'[0-9]+\.[0-9]+'
    p = re.findall(pattern, val)
    return float(p[0])

with open('test.txt', 'r') as f:
    txt = f.read()

pattern1 = r'[a-z]+[0-9]* [a-z]+[0-9]* [0-9]+\.[0-9]+'
p1 = re.findall(pattern1,txt)
p1.sort(key=my_sort)
result = p1[::-1]

with open('text2.txt','w') as f:
    for i in result:
        f.write(i+'\n')

text2.txt文件中的输出为

hyp5 hyp6 0.3333333333333333
word5 word6 0.2
word3 word4 0.2
hyp1 hyp2 0.1111111111111111
word1 word2 0.1111
hyp3 hyp4 0.07692307692307693

另一个例子是:

tear sight 0.1111111111111111
pulled spectacle 0.1111111111111111
statement black 0.1111111111111111
past woman 0.1
section black 0.1
tom answer 0.09090909090909091
man astonishment 0.09090909090909091
answer tom 0.09090909090909091
old lady 0.08333333333333333
boy wonder 0.08333333333333333
chapter tom 0.08333333333333333
turkey statement 0.058823529411764705

相关问题 更多 >

    热门问题