Python 需要帮助编写代码修改txt文件的内容,然后将其保存为json文件中的字典(它包含情感数据)

Python 需要帮助编写代码修改txt文件的内容,然后将其保存为json文件中的字典(它包含情感数据),python,dictionary,Python,Dictionary,我有一些句子保存在一个txt文件中,以及它们相应的情绪。它旨在训练机器学习分类器。但是,我想重新构造txt文件的内容,然后将其另存为json。下面我将解释我想要的前后结构 txt文件以以下格式保存: FIRST LINE OF TEXT .@negative SECOND LINE OF TEXT .@neutral 正如您所知,每个句子都保存在单独的一行中,后跟一个空格,后跟一个分隔符(在本例中为@),后跟为该句子指定的情感 以下是我想要的json文件格式: [{'message_body'

我有一些句子保存在一个txt文件中,以及它们相应的情绪。它旨在训练机器学习分类器。但是,我想重新构造txt文件的内容,然后将其另存为json。下面我将解释我想要的前后结构

txt文件以以下格式保存:

FIRST LINE OF TEXT .@negative
SECOND LINE OF TEXT .@neutral
正如您所知,每个句子都保存在单独的一行中,后跟一个空格,后跟一个分隔符(在本例中为@),后跟为该句子指定的情感

以下是我想要的json文件格式:

[{'message_body': 'FIRST LINE OF TEXT', 'sentiment': -1}, {'message_body': 'SECOND LINE OF TEXT', 'sentiment': 0}]
这里我们有一个开放的括号,后面是一个字典,有两个键(消息体和情感),其中消息体键包含文本句子,情感键包含情感的数值(负为-1,正为1,中性为0)。因此,它实际上保存为一个字典列表,每个字典对应于原始txt文件中的一行

有人知道我可以用什么方法编写代码来完成这项工作吗?我想这可能是某种for循环,但字典不是我的专长。提前谢谢

编辑:在将txt文件保存为csv后,想出了一种有点冗长的方法:

import pandas as pd

data_csv = pd.read_csv(filepath_or_buffer='text.csv' , sep='.@', header=None, names=['sentence','sentiment'])

list_data = []

for index, row in data_csv.iterrows():

    dictionary_data = {}
    dictionary_data['message_body'] = row['sentence']
    if row['sentiment'] == 'positive':
         dictionary_data['sentiment'] = 1
    elif row['sentiment'] == 'negative':
         dictionary_data['sentiment'] = -1
    else:
         dictionary_data['sentiment'] = 0
    list_data.append(dictionary_data)

一旦你阅读了文件,你应该能够把它作为一个列表理解,例如

list = [{'message_body': line_without_sentiment, 'sentiment': sentiment} for line in file]

我将把阅读该文件、从情感中解析正文以及编写JSON文件作为谷歌的练习。您可以做以下操作:

# read the file into a list of lines
with open("input.txt") as f:
    lines = f.readlines()

# set up empty dictionary
rv = []

# for each line, split into text and sentiment
for x in lines:
    line_dict = {'message_body': x.split('.@')[0].strip()}
    value = x.split('.@')[1].strip()
    # Apply sentiment logic
    if value == 'positive':
        line_dict['sentiment'] = 1
    elif value == 'negative':
        line_dict['sentiment'] = -1
    else:
        line_dict['sentiment'] = 0
    rv.append(line_dict)
输出:

>>> rv
[{'message_body': 'FIRST LINE OF TEXT', 'sentiment': -1},
 {'message_body': 'SECOND LINE OF TEXT', 'sentiment': 0}]

到目前为止你试过什么?请发布你的代码。老实说,我没有尝试任何东西,我只是把txt文件保存在一个文件夹中。我不知道从哪里开始,这就是我来这里的原因。我不熟悉堆栈溢出,是否需要一些启动代码来提问?谢谢看一看。嘿,谢谢你,我有一个简短的问题。您建议在“.”上拆分,但某些文本中有句点(例如小数点)。如果我在“@”上拆分,然后在if/elif/else语句中不包含“@”,这是否有效?如下所示:``对于行中的x:key,value=x.split('.@')[0]。strip(),x.split('.@')[1]。strip()#如果value='positive':rv[key]=1 elif value='negative':rv[key]=-1 else:rv[key]=0```@NorePatel我已经用您的修改更新了我的答案。非常感谢,我要尝试一下:)如果我有错误,可以让您知道它是否有效。索引器错误:列表索引超出范围。它出现在这一行:
-->12键,value=x.split('.@')[0].strip(),x.split('.@')[1].strip()
有什么想法吗?再次感谢!这表明“@”没有出现在该行中。