Python 将文本文件转换为CSV,并在文本上设置特殊条件

Python 将文本文件转换为CSV,并在文本上设置特殊条件,python,csv,text,Python,Csv,Text,我有一个像这样的文本文件 ********************摘句******************** [黄金]这是黄金句子 [原始]这是原始的句子 [rev]这是rev的句子 [ref]这是ref的句子 ********************摘句******************** [黄金]这是黄金句子 [原始]这是原始的句子 [rev]这是rev的句子 [ref]这是ref的句子 我想创建一个CSV,这样所有的[gold]句子都会出现 在第1列中,相应的[rev]句子出现在第二

我有一个像这样的文本文件

********************摘句********************

[黄金]这是黄金句子

[原始]这是原始的句子

[rev]这是rev的句子

[ref]这是ref的句子

********************摘句********************

[黄金]这是黄金句子

[原始]这是原始的句子

[rev]这是rev的句子

[ref]这是ref的句子

我想创建一个CSV,这样所有的
[gold]
句子都会出现 在第1列中,相应的
[rev]
句子出现在第二列中

我尝试使用
pd.read\u csv
读取该文件,但它给出了错误,因为句子中可能包含“,”,并且它给出了如下错误:

'Expected 1 fields in line 11, saw 2'

有人能帮我吗?

如果.txt文件中的数据结构与原始问题中所述的一致,下面的解决方案将从所有“
[gold]
”和“
[rev]
”行以及每对行中提取内容,并将其放入具有适当标题的.csv文件中

它通过以下方式实现这一目标:

  • input.txt
    中的每一行读入字符串列表
  • 使用
    re
    筛选此列表中以
    [gold]
    开头的行,将前导的
    [gold]
    和尾随的换行符(
    \n
    )剥离到一个新列表中,该列表包含所有“
    [gold]
    ”行的内容,按它们在
    input.txt
    中的显示顺序排列
  • 对从
    [rev]
    开始的行重复上述步骤,将这些行筛选到它们自己的列表中
  • 创建
    pandas.DataFrame
    ,使用上面生成的列表填充相应标题下的列(
    gold
    rev
    )-根据您的原始问题,第一列是
    gold
    ,第二列是
    rev
  • 通过
    pandas.DataFrame.to_csv()
将熊猫作为pd导入
进口稀土
以open('input.txt','r')作为f:
行=f.读行()
gold=[re.sub(r'(\[gold\]\s)|\n','',l)如果重新搜索(r'^\[gold\]',l),则行中的l为
rev=[re.sub(r'(\[rev\s\]\s)|\n','',l)如果重新搜索(r'^\[rev\s\]',l)]
数据={'gold':gold'rev':rev}
df=pd.DataFrame(数据)
df.to_csv('output.csv',index=False)
重要考虑事项

上述解决方案假设每个“
[gold]
”都有一个对应的“
[rev]
”——如您提供的示例所示

如果在您正在读取的.txt文件的每个“部分”中有“
[gold]
”行没有相应的“
[rev]
”行,或者反之亦然,则行的排序/配对将不正确


但是,如果.txt文件中的数据在结构上与原始示例完全一致,则这不会成为问题。

为什么不使用原始python打开:openyes,我可以这样做,但在那之后?您可以将其排列为标准csv或tsv文件,然后使用pandasread作为普通文件打开,拆分为行列表-您甚至可以使用一列将此列表转换为
dataframe
,然后您可以使用
gold
将行筛选为new
dataframe
中的新列,以及
raw
rev
ref
始终将代码、数据和错误消息作为文本而不是图像。对于图像上的数据,我们不能用它来创建示例代码——这样你就不会得到答案。谢谢,它起作用了,因为这两个考虑都得到了满足