2

我有以下代码,其中文件名是 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

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

4

4 回答 4

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)
于 2013-10-25T10:24:02.730 回答
5

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

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

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

并最终摆脱分号!

PS - 请参阅 Jon Clement 的评论和 Tim Pietzcker 的回答,了解为什么不应使用此代码。

于 2013-10-25T10:23:58.933 回答
5

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

import os

#...

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

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

于 2013-10-25T10:24:30.223 回答
0

改变

fname.strip('.csv')

fname = fname.strip('.csv')
于 2013-10-25T10:25:39.163 回答