【发布时间】:2019-12-18 15:59:30
【问题描述】:
我有一个包含地理标记推文的 .txt 文件。信息由“|”分隔特点。信息(可以被视为列)是日期时间、纬度、经度和 tweet_text。
Date_time|latitude|longitude|tweet_text
Mon Jan 01 09:09:57 +0000 2018|-37.8140362|144.9644232|terima kasih 2017 yang ohsem. semoga 2018 akan lebih baik lagi.-selamat tahun baru rakan-rakan…
Mon Jan 01 09:15:54 +0000 2018|-37.81639|144.9655|we love christmas and new year proposals! happy new year to everyone celebrating love this year…
Mon Jan 01 09:42:08 +0000 2018|-37.818|144.985|@michaelpaynter entertaining everyone at yarra park nye event #melbourne| #nye #music…
Mon Jan 01 09:45:16 +0000 2018|-37.818|144.985|@emilyurbandiva and brother @jwilliamsimusik entertaining everyone at yarra park nye eventâ€|¦
最初,我使用了
data = pd.read_csv('MelbCBD_scs2018_new.txt',sep="|", header=None)
,但只要 tweet_text 有“|”,它就会引发解析错误。
我尝试手动清理 tweet_text,但对于大文件来说工作量太大。因此我更改了 read_csv 的参数参数。
data = pd.read_csv('MelbCBD_scs2018_new.txt',sep="|", header=None, quoting=csv.QUOTE_NONE,error_bad_lines=False)
但它会显示以下警告并跳过我不想要的那些行(基本上是推文)。
b'Skipping line 340: expected 4 fields, saw 5
理想情况下,我希望在遇到 3 '|' 后删除任何特殊字符的代码.txt 文件的每一行中的字符,即 tweet_text 列,并将其解析为 .csv 文件,不跳过任何行。
【问题讨论】:
-
我会(个人)把它分成两部分,第一部分是你的实际问题,然后简单地将数据重新写入一个新文件。然后你就可以正常阅读了。该|在推文中意味着它不完全是 |分隔文件---我知道这对你来说不是新闻,但我认为你的问题应该是如何更正你的分隔文件。在这种情况下,为什么不写一个替换分隔符的脚本呢?
-
感谢您的反馈。你能推荐一个确定不会出现在 tweet_text 中的分隔符吗?
-
其实最好的办法就是在文本周围加上引号;带引号的字符串内的管道不会被假定为分隔符。例如类似于
1.0,1.1,"hello, wold","etc"的 CSV 行将解析为四列,而不是 5 列。或者,您可以将分隔符替换为 ASCII 分隔符——这些是键盘上没有的不可打印字符,因此不太可能出现在一条推文。 ascii 字符 28-31 保留用于不同的分隔符。 -
感谢您的想法。我会试试的。但是有没有一种解决方案,我可以在开头指定列数,以便代码不考虑任何'|'在第三个之后作为分隔符。
-
@alkasm 关于引用您的数据的建议是最好的长期解决方案。在带有嵌入分隔符的分隔文件字段中应被引用。这是所有分隔文件解析器的非常标准的规则。确保您的数据文件是一个正确引用的分隔文件,这将最大限度地确保它得到正确处理,即使处理它的程序需要更改。
标签: python pandas csv parsing text