我试图在Python中读取具有相同结构但相当原始的文件:使用默认的list
和解析工具读取它似乎并不微不足道,尽管我确信这是可能的。所以结构是:int
space int
space double
space一个包含空格
我需要将两个int
s和float
(文件头)分开存储,然后我想将整个字符串作为一个整体块,因为我的数据是在每个字符的位级别编码的(我希望我清楚地解释它…)。
由于字符串中的空格,使用天真的.split()
方法对我没有帮助,我一直在考虑在前三个之后"网格化"split()
中的所有元素,但是如果字符串中有双空格,我会丢失信息。
在c++中,我会使用<<
的整型和双精度,然后.getbyte()
的字符,在Python中有等效的吗?
您仍然可以使用.split()函数。既然你知道行的格式,你就可以传入要制作的行数。
str.split(str="", num)
参数str——这是任意分隔符,默认为空格。
Num——这是要分割的数目。
所以在你的例子中你应该可以输入
str.split(str='', 3)
应该拆分为:
- int int
- 双 字符串
所以每行的格式看起来像这样(我假设字符串没有单独用引号转义):
"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([ws_-]+)'
match = re.search(pat, line)
matches_by_group = match.groups() #Do something with this
这样,您将在元组中为每行拥有每个单独的部分。然后可以根据需要强制转换double类型、int类型等。