Python中的格式化输入

Python中的格式化输入,python,file-io,textinput,Python,File Io,Textinput,我有一个特殊的问题。我只需要使用python读取(从txt文件)在预定义偏移范围内存在的那些子字符串。比如说5-8和12-16 例如,如果文件中的一行类似于: abcdefghi akdhflskdhfhglskdjfhghsldk 然后我想读两个词——“efgh”和“kdhfl”。因为在单词“efgh”中,字符“e”的偏移量是5,“h”的偏移量是8。同样,另一个词“kdhfl” 请注意,空格也会添加到偏移量中。事实上,我的文件中的空白并非在每一行中都“一致地出现”,也不能用来提取感兴趣的单词

我有一个特殊的问题。我只需要使用python读取(从txt文件)在预定义偏移范围内存在的那些子字符串。比如说5-8和12-16

例如,如果文件中的一行类似于:

abcdefghi akdhflskdhfhglskdjfhghsldk
然后我想读两个词——“efgh”和“kdhfl”。因为在单词“efgh”中,字符“e”的偏移量是5,“h”的偏移量是8。同样,另一个词“kdhfl”

请注意,空格也会添加到偏移量中。事实上,我的文件中的空白并非在每一行中都“一致地出现”,也不能用来提取感兴趣的单词。这就是为什么,我必须依靠补偿

我希望我能把问题说清楚

等待答案

编辑-

是的,每行中的空白量可以更改,并且还可以考虑偏移量。例如,考虑这两条线-

abcz d 
a bc d 

在这两种情况下,我认为最后一个字符“d”的偏移量是相同的。正如我所说,文件中的空格不一致,我不能依赖它们。我需要根据字符的偏移量提取字符。您的答案仍然有效吗?

要从偏移量中提取片段,只需将每一行读入一个字符串,然后使用切片([from:To])访问一个子字符串

不清楚你对不一致的空格是怎么说的。如果空格添加到偏移量,则必须保持一致才能有意义。如果空白量可以更改,但实际上占了偏移量,则无法可靠地提取数据

在您添加的示例中,只要d的偏移量保持不变,就可以使用切片来提取它

>>> s = 'a bc d'
>>> s[5:6]
'd'
>>> s = 'abc  d'
>>> s[5:6]
'd'

要从偏移量中提取片段,只需将每一行读入一个字符串,然后使用切片([from:To])访问一个子字符串

不清楚你对不一致的空格是怎么说的。如果空格添加到偏移量,则必须保持一致才能有意义。如果空白量可以更改,但实际上占了偏移量,则无法可靠地提取数据

在您添加的示例中,只要d的偏移量保持不变,就可以使用切片来提取它

>>> s = 'a bc d'
>>> s[5:6]
'd'
>>> s = 'abc  d'
>>> s[5:6]
'd'

什么能阻止你使用正则表达式?除了空格外,偏移量是否会变化

/.{4}(.{4}).{4}(.{4})/

什么能阻止你使用正则表达式?除了空格外,偏移量是否会变化

/.{4}(.{4}).{4}(.{4})/
假设它是一个文件

for line in open("file"):
    print line[4:8] , line[11:16]
假设它是一个文件

for line in open("file"):
    print line[4:8] , line[11:16]

是的,空白量可以更改,并且还可以考虑偏移量。例如,在这两种情况下,考虑这两条线ABC D A BC D,我将最后字符“D”的偏移量视为相同。正如我所说,文件中的空格不一致,我不能依赖它们。我需要根据字符的偏移量提取字符。你的答案仍然有效吗?对不起,忽略上面的评论。不清楚。我对主要问题做了修改。@Eli非常感谢。我是Python的新手。现在我觉得这个问题我觉得这个问题很琐碎。很抱歉打扰您:)是的,空白金额可以更改,也可以考虑抵消。例如,在这两种情况下,考虑这两条线ABC D A BC D,我将最后字符“D”的偏移量视为相同。正如我所说,文件中的空格不一致,我不能依赖它们。我需要根据字符的偏移量提取字符。你的答案仍然有效吗?对不起,忽略上面的评论。不清楚。我对主要问题做了修改。@Eli非常感谢。我是Python的新手。现在我觉得这个问题我觉得这个问题很琐碎。抱歉打扰了:)我对我的问题做了一些修改,让它更清楚。我无法理解你的解决方案,但它仍然有效吗?regex不是万能的工具。对于以常量索引提取数据,简单切片更清晰、更快速。在确定简单切片或字符串方法不够用之前,请保存regexen。Python字符串有许多非常好的方法。您可以只使用s.startswith(“prefix”);而不是构建一个RE来匹配“^prefix”,并调用RE.match;与endswith类似。在这种情况下,字符串切片比斜杠和圆点要好得多。Regexp应该是最后的选择。我将其作为正则表达式实现,因为有人说不清楚如何处理空白。如果你不在乎空格会做什么,那就把它切掉。但是,若要对空格进行一些奇怪的操作(比如将制表符视为8个空格之类),则需要一个正则表达式。也就是说,从添加的示例来看,空格被视为字符,所以切片效果很好。我对我的问题进行了一些编辑,以使其更加清晰。我无法理解你的解决方案,但它仍然有效吗?regex不是万能的工具。对于以常量索引提取数据,简单切片更清晰、更快速。在确定简单切片或字符串方法不够用之前,请保存regexen。Python字符串有许多非常好的方法。您可以只使用s.startswith(“prefix”);而不是构建一个RE来匹配“^prefix”,并调用RE.match;与endswith类似。在这种情况下,字符串切片比斜杠和圆点要好得多。Regexp应该是最后的选择。我将其作为正则表达式实现,因为有人说不清楚如何处理空白。如果你不在乎空格会做什么,那就把它切掉。但是,若要对空格进行一些奇怪的操作(比如将制表符视为8个空格之类),则需要一个正则表达式。也就是说,从添加的示例来看,空格被视为字符,因此切片效果很好。