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

时间:2013-10-25 10:22:24

标签: 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');

输出我正在

fname     :FR1.1.csv
after strip fname: FR1.1.csv

必需的输出 - >

fname     :FR1.1.csv
after strip fname: FR1.1

我想在循环之后我的代码中存在一些缩进问题。 plesae告诉我实现这个目标的正确方法。

4 个答案:

答案 0 :(得分:7)

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

fname = fname.strip('.csv')   # no semicolons in Python!

但是这个电话没有按你所期望的那样做。它会从您的字符串中删除所有前导和尾随字符csv.

>>> "cross.csv".strip(".csv")
'ro'

所以你可能想做

import re
fname = re.sub(r"\.csv$", "", fname)

答案 1 :(得分:5)

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

>>> "FR1.1.csv".strip('.csv')
'FR1.1'
>>> m = "FR1.1.csv".strip('.csv')
>>> print(m)
FR1.1

您需要fname = fname.strip('.csv')

最后摆脱分号!

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

答案 2 :(得分:5)

您可能应该使用os.path进行路径操作:

import os

#...

for fname in filenames:
    print "fname     : ", fname
    fname = os.path.splitext(fname)[0]
    #...

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

答案 3 :(得分:0)

更改

fname.strip('.csv')

fname = fname.strip('.csv')