Python 将文本文件转换为CSV,并在文本上设置特殊条件
我有一个像这样的文本文件 ********************摘句******************** [黄金]这是黄金句子 [原始]这是原始的句子 [rev]这是rev的句子 [ref]这是ref的句子 ********************摘句******************** [黄金]这是黄金句子 [原始]这是原始的句子 [rev]这是rev的句子 [ref]这是ref的句子 我想创建一个CSV,这样所有的Python 将文本文件转换为CSV,并在文本上设置特殊条件,python,csv,text,Python,Csv,Text,我有一个像这样的文本文件 ********************摘句******************** [黄金]这是黄金句子 [原始]这是原始的句子 [rev]这是rev的句子 [ref]这是ref的句子 ********************摘句******************** [黄金]这是黄金句子 [原始]这是原始的句子 [rev]这是rev的句子 [ref]这是ref的句子 我想创建一个CSV,这样所有的[gold]句子都会出现 在第1列中,相应的[rev]句子出现在第二
[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
将行筛选为newdataframe
中的新列,以及raw
、rev
、ref
始终将代码、数据和错误消息作为文本而不是图像。对于图像上的数据,我们不能用它来创建示例代码——这样你就不会得到答案。谢谢,它起作用了,因为这两个考虑都得到了满足