我正在處理大量文件(值大約4GB),它們都包含1到100個條目之間的任何地方,格式如下(兩個***之間是一個條目):通過正則表達式和/或Python從文本文件中提取信息
***
Type:status
Origin: @z_rose yes
Text: yes
URL:
ID: 95482459084427264
Time: Mon Jul 25 08:16:06 CDT 2011
RetCount: 0
Favorite: false
MentionedEntities: 20776334
Hashtags:
***
***
Type:status
Origin: @aaronesilvers text
Text: text
URL:
ID: 95481610861953024
Time: Mon Jul 25 08:12:44 CDT 2011
RetCount: 0
Favorite: false
MentionedEntities: 2226621
Hashtags:
***
***
Type:status
Origin: @z_rose text
Text: text and stuff
URL:
ID: 95480980026040320
Time: Mon Jul 25 08:10:14 CDT 2011
RetCount: 0
Favorite: false
MentionedEntities: 20776334
Hashtags:
***
現在我想以某種方式將這些項目導入大熊貓進行質量分析,但很明顯,我不得不將其轉換成格式大熊貓可以處理。所以我想寫的是,上述轉換到.csv看起來像這樣(用戶是文件標題)的腳本:
User Type Origin Text URL ID Time RetCount Favorite MentionedEntities Hashtags
4012987 status @z_rose yes yes Null 95482459084427264 Mon Jul 25 08:16:06 CDT 2011 0 false 20776334 Null
4012987 status @aaronsilvers text text Null 95481610861953024 Mon Jul 25 08:12:44 CDT 2011 0 false 2226621 Null
(格式是不完美的,但希望你的想法)
我已經有一些代碼工作的基礎上,它經常在12的信息段,但不幸的是,一些文件包含一些領域的幾個whitelines。什麼我基本上希望做的是:
fields[] =['User', 'Type', 'Origin', 'Text', 'URL', 'ID', 'Time', 'RetCount', 'Favorite', 'MentionedEntities', 'Hashtags']
starPair = 0;
User = filename;
read(file)
#Determine if the current entry has ended
if(stringRead=="***"){
if(starPair == 0)
starPair++;
if(starPair == 1){
row=row++;
starPair = 0;
}
}
#if string read matches column field
if(stringRead == fields[])
while(strRead != fields[]) #until next field has been found
#extract all characters into correct column field
然而,問題出現某些字段可以包含的字段的字[] ..我可以檢查一個\ n字符第一,這將大大減少量的錯誤條目,但不會消除它們。
任何人都可以指向正確的方向嗎?
在此先感謝!
用戶來自哪裏? – depperm
哦,我的壞,用戶從文本文件名稱中提取(所有文本文件都是由用戶ID)。 – user3394131
也許只是嘗試按「***」拆分,然後用換行符拆分結果?將它們連接到一個字符串並將其打印到文本文件中。 – Eswemenasja