python strip函数没有给出预期的输出

Ram*_*ore 2 python csv

我有下面的代码,其中文件名是FR1.1.csv,FR2.0.csv等.我使用这些名称在标题行中打印,但我想将这些名称修改为FR1.1,Fr2.0等.因此我使用strip函数删除.csv.当我在命令提示符下尝试它的工作正常.但是当我把它添加到主脚本时它没有给出输出.

for fname in filenames:
    print "fname     : ", fname
    fname.strip('.csv');
    print "after strip fname: ", fname
    headerline.append(fname+' Compile');
    headerline.append(fname+' Run');
Run Code Online (Sandbox Code Playgroud)

输出我得到了

fname     :FR1.1.csv
after strip fname: FR1.1.csv
Run Code Online (Sandbox Code Playgroud)

要求输出 - >

fname     :FR1.1.csv
after strip fname: FR1.1
Run Code Online (Sandbox Code Playgroud)

我想在for循环后我的代码中有一些缩进问题.plesae告诉我实现这个的正确方法是什么.

Tim*_*ker 7

字符串是不可变的,因此字符串方法不能更改原始字符串,它们返回一个您需要再次分配的新字符串:

fname = fname.strip('.csv')   # no semicolons in Python!
Run Code Online (Sandbox Code Playgroud)

但是这个电话没有做你想象的那样.它会删除所有的开头和结尾的字符c,s,v.从你的字符串:

>>> "cross.csv".strip(".csv")
'ro'
Run Code Online (Sandbox Code Playgroud)

所以你可能想做

import re
fname = re.sub(r"\.csv$", "", fname)
Run Code Online (Sandbox Code Playgroud)


Suk*_*lra 5

字符串是不可变的.strip()返回一个新字符串.

>>> "FR1.1.csv".strip('.csv')
'FR1.1'
>>> m = "FR1.1.csv".strip('.csv')
>>> print(m)
FR1.1
Run Code Online (Sandbox Code Playgroud)

你需要这样做fname = fname.strip('.csv').

并最终摆脱分号!

PS - 请参阅Jon Clement的评论和Tim Pietzcker的答案,了解为何不应使用此代码.


Bar*_*zKP 5

您可能应该os.path用于路径操作:

import os

#...

for fname in filenames:
    print "fname     : ", fname
    fname = os.path.splitext(fname)[0]
    #...
Run Code Online (Sandbox Code Playgroud)

其他答案中提供了代码失败的特殊原因.

  • 这应该是公认的答案.使用正确的工具完成工作. (2认同)