Python 2.7 - pandas.read_table - 如何从平面文件导入 quadruple-pipe-separated 字段

Python 2.7 - pandas.read_table - how to import quadruple-pipe-separated fields from flat file

我是一个不错的 SAS 程序员,但我对 Python 还是个新手。现在,我得到了 Twitter 提要,每个提要都保存在 非常大的 平面文件中,第 1 行中有 headers,数据结构如下所示:

CREATED_AT||||ID||||TEXT||||IN_REPLY_TO_USER_ID||||NAME||||SCREEN_NAME||||DESCRIPTION||||FOLLOWERS_COUNT||||TIME_ZONE||||QUOTE_COUNT||||REPLY_COUNT||||RETWEET_COUNT||||FAVORITE_COUNT

Tue Nov 14 12:33:00 +0000 2017||||930413253766791168||||ICYMI: Football clubs join the craft beer revolution! A good read|||| ||||BAB||||BABBrewers||||Monthly homebrew meet-up at 1000 Trades, Jewellery Quarter. First Tuesday of the month. All welcome, even if you've never brewed before.||||95|||| ||||0||||0||||0||||0
Tue Nov 14 12:34:00 +0000 2017||||930413253766821456||||I'm up for it|||| ||||Misty||||MistyGrl||||You CAN DO it!||||45|||| ||||0||||0||||0||||0

我猜是这样的,因为在 Twitter 提要中可以找到任何类型的字符,但四重管道不太可能。

我知道有些人为此使用 JSON,但我有这些文件:很多。我可以使用 SAS 轻松转换这些文件,但这次我更喜欢 "go pythonic"。

现在,我似乎无法找到一种方法让 Python (2.7) 理解四管是实际的分隔符。以下代码的输出:

import pandas as pd

with open('C:/Users/myname.mysurname/Desktop/my_twitter_flow_1.txt') as theInFile:
    inTbl = pd.read_table(theInFile, engine='python', sep='||||', header=1)
    print inTbl.head()

似乎表明 Python 不认为不同的字段是不同的,而是简单地引入前 5 行中的每一行,直到换行符,忽略 ||||分隔器。

基本上,我得到的输出与我上面写的一样,用于向您展示数据结构。

有什么提示吗?

仅使用您问题中的数据:

>>> df = pd.read_csv('rio.txt', sep='\|{4}', skip_blank_lines=True, engine='python')
>>> df
                       CREATED_AT                  ID  \
0  Tue Nov 14 12:33:00 +0000 2017  930413253766791168   
1  Tue Nov 14 12:34:00 +0000 2017  930413253766821456   

                                                TEXT IN_REPLY_TO_USER_ID  \
0  ICYMI: Football clubs join the craft beer revo...                       
1                                      I'm up for it                       

    NAME SCREEN_NAME                                        DESCRIPTION  \
0    BAB  BABBrewers  Monthly homebrew meet-up at 1000 Trades, Jewel...   
1  Misty    MistyGrl                                     You CAN DO it!   

   FOLLOWERS_COUNT TIME_ZONE  QUOTE_COUNT  REPLY_COUNT  RETWEET_COUNT  \
0               95                      0            0              0   
1               45                      0            0              0   

   FAVORITE_COUNT  
0               0  
1               0  

注意 sep 参数。当它的长度超过一个字符且不等于 '\s+' 时,它被解释为正则表达式。但是'|'字符在正则表达式中具有特殊含义,因此必须使用“\”字符对其进行转义。我可以简单地写 sep='\|\|\|\|';但是,我使用了缩写。