我有下面的代码,其中文件名是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告诉我实现这个目标的正确方法。
答案 0 :(得分:7)
字符串是不可变的,因此字符串方法不能更改原始字符串,它们会返回一个需要再次分配的新字符串:
fname = fname.strip('.csv') # no semicolons in Python!
但是这个电话没有按你所期望的那样做。它会从您的字符串中删除所有前导和尾随字符c
,s
,v
和.
:
>>> "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')