按字符数分割字符串

时间:2011-08-18 16:47:08

标签: python string

我无法弄清楚如何使用字符串方法执行此操作:

在我的文件中,我有类似1.012345e0070.123414e-004-0.1234567891.21423 ...这意味着数字之间没有分隔符。

现在,如果我从这个文件中读取一行,我会得到一个像上面一样的字符串,我想在之后将其拆分。 12个字符。 就我所见,str.split()或任何其他字符串方法都无法做到这一点,但也许我忽略了什么?

THX

7 个答案:

答案 0 :(得分:23)

由于您希望以不寻常的方式进行迭代,因此生成器是一种抽象的方法:

def chunks(s, n):
    """Produce `n`-character chunks from `s`."""
    for start in range(0, len(s), n):
        yield s[start:start+n]

nums = "1.012345e0070.123414e-004-0.1234567891.21423"
for chunk in chunks(nums, 12):
    print chunk

产生

1.012345e007
0.123414e-00
4-0.12345678
91.21423

(看起来不对,但那些是12个字符块)

答案 1 :(得分:12)

您正在寻找string slicing.

>>> x = "1.012345e0070.123414e-004-0.1234567891.21423"
>>> x[2:10]
'012345e0'

答案 2 :(得分:4)

line = "1.012345e0070.123414e-004-0.1234567891.21423"
firstNumber = line[:12]
restOfLine = line[12:]

print firstNumber
print restOfLine

<强>输出

1.012345e007
0.123414e-004-0.1234567891.21423

答案 3 :(得分:3)

from itertools import izip_longest

def grouper(n, iterable, padvalue=None):
    return izip_longest(*[iter(iterable)]*n, fillvalue=padvalue)

答案 4 :(得分:2)

你可以这样做:

step = 12
for i in range(0, len(string), 12):
    slice = string[i:step]
    step += 12

以这种方式在每次迭代中,您将获得一个包含14个字符的切片。

答案 5 :(得分:1)

尝试此功能:

x = "1.012345e0070.123414e-004-0.1234567891.21423"
while len(x)>0:
  v = x[:12]
  print v
  x = x[12:]

答案 6 :(得分:1)

我一直认为,由于字符串加法操作可以通过简单的逻辑,可能是这样的除法。除以数字时,它应按该长度分割。所以可能这就是你要找的东西。

class MyString:
    def __init__(self, string):
        self.string = string
    def __div__(self, div):
        l = []
        for i in range(0, len(self.string), div):
            l.append(self.string[i:i+div])
        return l

>>> m = MyString(s)
>>> m/3
['abc', 'bdb', 'fbf', 'bfb']


>>> m = MyString('abcd')
>>> m/3
['abc', 'd']

如果你不想创建一个全新的类,只需使用这个重新包装上述代码核心的函数,

>>> def string_divide(string, div):
       l = []
       for i in range(0, len(string), div):
           l.append(string[i:i+div])
       return l

>>> string_divide('abcdefghijklmnopqrstuvwxyz', 15)
['abcdefghijklmno', 'pqrstuvwxyz']