Python中的格式化输入
我遇到了一个奇怪的问题。我需要用Python从一个文本文件中读取一些特定位置的子字符串。比如说,我想读取第5到8个字符和第12到16个字符。
举个例子,如果文件中的一行是这样的:
abcdefghi akdhflskdhfhglskdjfhghsldk
那么我想读取两个词——“efgh”和“kdhfl”。因为在“efgh”这个词中,字符“e”的位置是5,而“h”的位置是8。同样的,另一个词“kdhfl”也是如此。
需要注意的是,空格也算在字符的位置里。实际上,我文件中的空格在每一行并不是“稳定出现”的,不能依赖它们来提取我想要的词。这就是我必须依靠字符位置的原因。
希望我能把问题说清楚。
期待大家的回答!
编辑 -
是的,每一行的空格数量可以变化,也会影响字符的位置。比如,考虑这两行 -
abcz d
a bc d
在这两种情况下,我认为最后一个字符“d”的位置是相同的。正如我所说,文件中的空格并不一致,我不能依赖它们。我需要根据字符的位置来选择字符。你的回答还适用吗?
3 个回答
-1
有什么阻止你使用正则表达式呢?除了空格以外,偏移量会有变化吗?
/.{4}(.{4}).{4}(.{4})/
1
要从偏移量中提取内容,可以简单地把每一行读入一个字符串,然后用切片([from:to])来获取子字符串。
关于你提到的不一致的空格,听起来有点不清楚。如果空格会影响偏移量,那它必须是统一的,才能有意义。如果空格的数量可以变化,但实际上又影响了偏移量,那你就无法可靠地提取数据了。
在你补充的例子中,只要d的偏移量保持不变,你就可以通过切片来提取它。
>>> s = 'a bc d'
>>> s[5:6]
'd'
>>> s = 'abc d'
>>> s[5:6]
'd'
5
假设这是一个文件,
for line in open("file"):
print line[4:8] , line[11:16]