2014-03-12 40 views
1

我試圖讀取Python中具有所有相同結構但相當原始的文件:使用默認的list和解析工具讀取它似乎並不重要,儘管我確信這是可能的。 所以結構:int空間int空間double空間包含空格在Python中讀取單行文件不跳過一些空格

我需要存儲兩個int S和float(文件頭)長的長字符串分開,然後我想有整個字符串作爲一個整體集團,因爲我的數據是在每個字符的位級進行編碼的(我希望我可以清楚地解釋它......)。

使用天真的.split()方法並不能幫助我,因爲在字符串中,我一直在想前三後「齧合」,在split()所有元素的空間,但如果有我會失去信息雙字符串中的空格。

在C++中,我使用<<爲整數和雙,然後.getbyte()爲人物,是否有當量在Python?

+0

第1步:讀取整行。第2步:用戶正則表達式進行解析。在這裏查看實現正則表達式的示例https://developers.google.com/edu/python/regular-expressions?csw=1 – CoryKramer

+1

如何爲''str.split()''使用''maxsplit''參數? ](http://docs.python.org/2/library/stdtypes.html#str.split)? – tsroten

回答

4

您仍然可以使用.split()函數。既然你知道你可以傳遞的行數的格式,

str.split(str="", num) 

參數
STR - 這是任何分隔符,默認情況下它是空間。
num - 這是分割的數量。
所以你的情況,你應該能夠做到

str.split(str='', 3) 

這應該分成:

  • INT
  • INT
+0

非常感謝,確實是正確的選擇;) –

+2

該數字不應該對應於行數。它應該對應於分割的數量(即''3'')。 [Python文檔](http://docs.python.org/3/library/stdtypes.html#str.split)說:*如果給出maxsplit,最多maxsplit分裂完成(因此,列表將在大多數maxsplit + 1元素)* – tsroten

+1

很高興能夠提供幫助 – Craicerjack

1

所以eac的格式H線路看起來像這樣(我假設該字符串不單獨用引號轉義):

"4 5 8.7 here is a really long string" 

一般來說,對於更復雜的分析,我們建議您使用正則表達式。

import re 
[...] 

for line in file: 
    #let's say line is "4 5 8.7 here is a really long string" 
    pat = r'([0-9]+)\s([0-9]+)\s([0-9\.]+)\s([\w\s\_\-]+)' 
    match = re.search(pat, line) 
    matches_by_group = match.groups() #Do something with this 

這樣你就可以在每一行的元組中爲每個單獨的部分。然後,您可以根據需要投射double,int等。

相關問題