在python中读取单行文件而不跳过某些空格

时间:2014-03-12 16:11:33

标签: python file

我正在尝试读取Python中具有相同结构但非常原始的文件:使用默认的list和解析工具读取它似乎并不简单,但我确定有可能的。 所以结构是:int space int space double space一个包含空格的长字符串

我需要将两个intfloat(文件头)分开存储,然后我想将整个字符串作为整体块,因为我的数据是在每个角色中的位级别(我希望我能清楚地解释它......)。

天真地使用.split()方法对我没有帮助,因为字符串中的空格,我一直在考虑在前三个之后“{1}}中的所有元素”“网格化”,但我如果字符串中有双重空格,则会丢失信息。

在C ++中,我将split()用于整数和双精度,然后<<用于字符,在Python中是否有等价物?

2 个答案:

答案 0 :(得分:4)

您仍然可以使用.split()函数。由于您知道线条的格式,您可以传递要制作的行数。

str.split(str="", num)

参数
str - 这是任何分隔符,默认情况下是空格 num - 这是要进行的分割数 所以在你的情况下你应该能够做到

str.split(str='', 3)

哪个应该分成:

  • int
  • INT
  • 字符串

答案 1 :(得分:1)

所以每行的格式如下(我假设字符串没有单独用引号转义):

"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等。