2014-03-12 89 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等。

相关问题