读取带有转义字符的csv

2024-06-23 20:03:41 发布

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

我有一个csv文件,其中包括一些文本。我想将此文本标记化(拆分为一个单词列表),但在pd.read_csv如何解释转义字符时遇到了问题。在

我的csv文件如下所示:

text, number
one line\nother line, 12

代码如下:

^{pr2}$

输出为:

['one', 'line\\nother', 'line']

我想要的是:

['one', 'line', 'other', 'line']

问题是pd.read_csv()没有将\n解释为换行符,而是将其解释为两个字符(\和{})。在

{{cd6}和{cd6}的字符串{cdi>都没有删除^ cd6>的字符串。在

如果我显式地设置df.iloc[0,0] = 'one line\nother line'word_tokenize工作得很好,因为这次\n实际上被解释为换行符。在

理想情况下,我只需更改pd.read_csv()解释文件的方式,但其他解决方案也可以。在


Tags: 文件csv字符串text标记文本列表read
3条回答

你可以试试这个

import pandas as pd

df = pd.read_csv("test.csv", header=None)
df = df.apply(lambda x: x.str.replace('\\', " "))
print(df.iloc[1, 0])

# output: one line other line 

在您的情况下,只需使用:

data = pd.read_csv('test.csv', sep='\\,', names=['c1', 'c2', 'c3', 'c4'], engine='python')

这个问题措辞有点拙劣。我猜pandas转义字符串中的\会使nltk.word_tokenize混淆。pandas.read_csv只能使用一个分隔符(或regex,但我怀疑您是否希望这样做),因此它将始终以"one line\nother line"的形式读取文本列,并转义反斜杠以保留它。如果您想进一步解析和格式化它,可以使用转换器。下面是一个例子:

import pandas as pd
import re

df = pd.read_csv(
         "file.csv", converters={"text":lambda s: re.split("\\\\n| ", s)}
)

以上结果:

^{pr2}$

编辑:如果需要使用nltk进行拆分(假设拆分取决于语言模型),则需要在传递到word_tokenize之前取消字符串的转义;请尝试如下操作:

lambda s: word_tokenize(s.encode('utf-8').decode('unicode_escape')

注意:查询中的匹配列表非常复杂,因此您可能希望通过如下方式更改lambda将其转换为元组:

lambda s: tuple(re.split("\\\\n| ", s))

相关问题 更多 >

    热门问题