切片Python字符串

时间:2014-11-22 10:17:12

标签: python string slice

我目前正在尝试将特定字符串切片为部分,但总是摆脱索引错误。

字符串是:

columnData = "001.001.000.100.000.000.000"

myClassInstance = MyClass(
    param1 = columnData[0:3],  
    param2  = columnData[4:3], 
    param3 = columnData[8:3],  
    param4  = 0,             
    param5 = columnData[12:3], 
    param6 = columnData[16:3], 
    param7 = columnData[20:3], 
    param8 = columnData[24:3]  

每当它尝试设置param8时,我都会出现索引错误。

然后我尝试将切片放入文件中以查看错误的位置并尝试:

                        f = open("TestmyTset.txt","w")
                        f.write(columnData)
                        f.write("\nparam1: ")
                        f.write(columnData[0:3])
                        f.write("\nparam2r: ")
                        f.write(columnData[4:3])
                        f.close();

但param2从未打印到文件中。

输出结果为:

001.001.000.100.000.000.000
param1: 001
param2: 

所以我的问题在于我的错误是我一次又一次地尝试而不是找到它(实际上每个切片都应该是字符串中的一个。)

正如所要求的那样,预期产出将是:

param1 = "001"
param2 = "001"  (the 2nd 001 in the original string)
param3 = "000"
param4 = "0"
param5 = "100"
....

5 个答案:

答案 0 :(得分:3)

我认为你要做的是:

columnData [4:7] columnData [8:11] 等

我觉得最好还是

  

split_column_data = columnData.split('。')

在字符串中的每个.处拆分字符串。并返回一个列表

  

>>> print split_column_data

     

['001','001','000',...]

答案 1 :(得分:2)

slice() states的文档:

  

slice([start], stop[, step])

     

返回表示range(start, stop, step)指定的索引集的 slice 对象。 start step 参数默认为None。切片对象具有只读数据属性 start stop step ,它们仅返回参数值(或其默认值)。他们没有其他明确的功能;但是它们被Numerical Python和其他第三方扩展使用。使用扩展索引语法时也会生成切片对象。例如:a[start:stop:step]a[start:stop, i]

换句话说,你想要的是:

param2 = columnData[4:7]
param3 = columnData[8:11]
...

答案 2 :(得分:1)

在python中切片如下:[start_index:end_index:step_size] - 换句话说,当你访问columnData[4:3]时,你试图做的是从索引4读到索引3 - 这是没有意义的。

您需要阅读columnData[4:7]以获得所需的结果。

我还建议您查看str.split,因为columnData.split('.')会以更加轻松的方式为您提供所需内容。

答案 3 :(得分:1)

columnData = "001.001.000.100.000.000.000"
param1,param2,param3,param5,param6,param7,param8 = columnData.split('.')
param4 = 0
print ("param1 :{} , param2 :{}, param3 :{}, param4: {}, param5 :{}, param6 :{}, param7 :{},param8 :{}").\
            format(param1, param2, param3, param4, param5, param6, param7, param8)


Output:
param1 :001 , param2 :001, param3 :000, param4: 0, param5 :100, param6 :000, param7 :000,param8 :000

答案 4 :(得分:1)

据我了解你的问题,似乎你想要切一个字符串

columnData = "001.001.000.100.000.000.000"

myClassInstance = MyClass(
    param1 = columnData[0:3],  
    param2  = columnData[4:3], 
    param3 = columnData[8:3],  
    param4  = 0,             
    param5 = columnData[12:3], 
    param6 = columnData[16:3], 
    param7 = columnData[20:3], 
    param8 = columnData[24:3]  
)

必须设置

param1 : 001
param2 : 001
param3 : 000
param4 : 0
param5 : 100
param6 : 000
param7 : 000
param8 : 000

现在据我所知

a = "123456789" to 123
print a[0:3]
print a[3:6]
.....

将给出

123
456
....

因此,对于您的示例,您需要设置

columnData = "001.001.000.100.000.000.000"

myClassInstance = MyClass(
    param1 = columnData[0:3],  
    param2  = columnData[4:7], 
    param3 = columnData[8:11],  
    param4  = 0,             
    param5 = columnData[12:15], 
    param6 = columnData[16:19], 
    param7 = columnData[20:23], 
    param8 = columnData[24:27]  
)

它会工作:)祝你好运!