【发布时间】:2019-05-28 15:10:31
【问题描述】:
我有一个 csv 文件,其中包含一些文本等。我想标记(拆分为单词列表)此文本,但在 pd.read_csv 如何解释转义字符时遇到问题。
我的 csv 文件如下所示:
text, number
one line\nother line, 12
代码如下:
df = pd.read_csv('test.csv')
word_tokenize(df.iloc[0,0])
输出是:
['one', 'line\\nother', 'line']
而我想要的是:
['one', 'line', 'other', 'line']
问题是pd.read_csv() 没有将\n 解释为换行符,而是解释为两个字符(\ 和n)。
我尝试将escapechar 参数设置为'\' 和'\\',但两者都只是从字符串中删除斜杠而不对换行符进行任何解释,即字符串变为on one linenon other line。
如果我明确设置df.iloc[0,0] = 'one line\nother line',word_tokenize 就可以正常工作,因为这次\n 实际上被解释为换行符。
理想情况下,我会简单地更改 pd.read_csv() 解释文件的方式,但其他解决方案也可以。
【问题讨论】:
-
这两个例子都没有
\n。你所有的例子都有一个` (read text has it escaped, of course), yet you say all the time that it's\n` (例如“如果我明确设置 df.iloc[0,0] = 'one line\other line',word_tokenize 工作得很好,因为 \n 实际上被解释为换行符这次。” - 但字符串在任何地方都没有\n???)请更正此问题并指定您想要的内容(\n或 `` 用作换行符)。 -
您可以遍历您的输出并执行
split('\'),如果其中的字符“\”,它将把一个字符串分成两部分。更多信息:geeksforgeeks.org/python-string-split 但这不是很理想 -
@h4z3 将文本中的所有
\更正为\n,因为它们应该是。我希望将\n解释为换行符。 -
好的。它加载文本并转义反斜杠,因此它实际上与加载的内容相同(未转换为换行符)。为了让它成为一个换行符,你需要用双反斜杠代替一个。如果您打印整个数组,它将是
['one', 'line\nother', 'line']但如果您手动打印 list[1] ,它将解释换行符 - 就像您在评论中想要的那样。但是您的帖子说要在\n上拆分,这是另一回事... -
Tbh 将此作为真正的 csv 读取(其中新行表示新行),我可能会将整个内容作为普通文本文件读取(例如,通过循环中的行),替换双反斜杠使用单个,然后将整个内容解释为 csv(在两者之间保存或不保存,具体取决于大小以及您处理原始文件和替换的方式) - 两个“行”之前由文本
\n而不是物理换行符分隔现在由物理换行符分隔,因此被解释为这样。