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 に答える