Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python从列表项中剥离字符_Python_String_List_Strip - Fatal编程技术网

python从列表项中剥离字符

python从列表项中剥离字符,python,string,list,strip,Python,String,List,Strip,我正在尝试从存储在矩阵或列表列表中的时间戳中删除字符(如果需要)。我想提取项目,并使用它作为一个文件名后,剥离不需要的字符,它应该保持不变的原始列表。我对剥离和其他管柱操作非常熟悉,我经常使用它,但现在我被它绊倒了,我不知道发生了什么,我几乎什么都试过了。我想得到“2011092723492”而不是原来的“2011.09.27 23:49 2”。在本例中,只需替换“:”以使其更简单。我错过什么了吗 for x in FILEmatrix: flnm = str(x[4])

我正在尝试从存储在矩阵或列表列表中的时间戳中删除字符(如果需要)。我想提取项目,并使用它作为一个文件名后,剥离不需要的字符,它应该保持不变的原始列表。我对剥离和其他管柱操作非常熟悉,我经常使用它,但现在我被它绊倒了,我不知道发生了什么,我几乎什么都试过了。我想得到“2011092723492”而不是原来的“2011.09.27 23:49 2”。在本例中,只需替换“:”以使其更简单。我错过什么了吗

for x in FILEmatrix:
    flnm = str(x[4])               # or just 'x[4]' doesn't matter it is a string for sure
    print type(flnm)               # <type 'str'> OK, not a list or whatever
    print 'check1: ', flnm         # '2011.09.27 23:49 2'
    flnm.strip(':')                # i want to get '2011092723492', ':' for starters, but...
    print 'check2: ', flnm         # nothing... '2011.09.27 23:49 2'
    string.strip(flnm,':')
    print 'check3: ', flnm         # nothing... '2011.09.27 23:49 2'
    flnm = flnm.strip(':')
    print 'check4: ', flnm         # nothing... '2011.09.27 23:49 2'
    flnm.replace(':', '')
    print 'check5: ', flnm         # nothing... '2011.09.27 23:49 2' 
非常感谢

这不是它的功能,也不是它的工作原理。字符串是不可变的,因此从方法返回结果

flnm = flnm.replace(':', '')
对要删除的其他字符重复此操作。

尝试以下操作:

import re
flnm = re.sub('[^0-9]', '', flnm)

如果要从字符串中删除那些已知的非alpha字符,这将非常快:

flnm.translate(None, ' .:')

在Python中,通常有多种方法来实现这一点

但首先,脱衣舞并不像你想象的那样有效

>>> flnm = '2011.09.27 23:49 2'
>>> flnm.strip('2') # notice that strip only affects the ends of the string
'011.09.27 23:49 '
您可以加入未被拒绝的字符

rejected = ' :.'
flnm = ''.join(c for c in flnm if c not in rejected)
或者只加入数字字符

flnm = ''.join(c for c in flnm if c.isdigit())
或将多个调用链接到string.replace

flnm = flnm.replace(' ','').replace('.','').replace(':','')
或者使用re.sub

由于字符串是不可变的,请确保将结果分配回flnm

编辑:

还有更多的方法

根据伊万的回答:

rejected = ' :.'
flnm = reduce(lambda a, d: a.replace(d,''), rejected, flnm)
rejected = ' :.'
flnm = flnm.translate(None, rejected)
根据oxtopus的回答:

rejected = ' :.'
flnm = reduce(lambda a, d: a.replace(d,''), rejected, flnm)
rejected = ' :.'
flnm = flnm.translate(None, rejected)

我更喜欢oxtopus使用translate,因为它最直接。

非常感谢!它起作用了!我开始明白了。到目前为止,我已经对readline中的数据执行了剥离,所以可能存在差异。但readline中的字符串与列表中的字符串有什么区别?另请参见: