2016-12-06 20 views
1

ディレクトリ内のファイル名置換のための基本的なPythonコードを見てきましたが、それらは常に既知の文字列ですが、ある長さの?ファイル名の先頭から4文字と13文字の文字列を削除します

これは機能しますか?

newFileName = file.replace([-5:], "") 

私は拡張子を削除せずにファイル名から最後の5文字を​​削除しようとしています。ここで

はアップデートです: 私はこれを行うにしようとしています:

DMC-CIWS15-AAAA-A00-00-0000-00A-018A-D_014-00_EN-US.xml 

に端からDMC-と_014-00_EN-USを削除
CIWS15-AAAA-A00-00-0000-00A-018A-D.xml 

これをファイルのディレクトリを修正するコードに追加する必要があります。

+4

は単なる文字列をスライス:newFileName =ファイル:、 –

+0

@MaximilianPeters拡張をオフにスライスしないこと[0 -5]? – Steven

+2

拡張子を保持する必要がある場合は、rfind:newFileName = file [0:file.rfind( '。')] –

答えて

2

この問題(私が正しく理解している場合)は明確な分離があります。拡張機能を削除し、X文字を最初と最後から削除して、最後に拡張機能を追加して最終的な答えを得ます。

import os 

oldFileName = 'xxxx-filename-xxxxx.XML' 
# remove n chars in beginning, m chars at end 
n = 5 
m = 6 
name, ext = os.path.splitext(oldFileName) 
# splice away the chars, and add the extension 
newFileName = '{}{}'.format(name[0:-m][n:], ext) 
# newFileName == 'filename.XML' 

だからあなたの場合には、あなたはn=4m=13を使用します。

長さがわからないが、最初のダッシュアウトまでのすべてを含め、最初のアンダースコアの後ろのすべてを同様に望むなら(これは通常のファイル名に下線ができないことを意味するか、それの最初の部分)、これも動作します:

import os 

oldFileName = 'DMC-CIWS15-AAAA-A00-00-0000-00A-018A-D_014-00_EN-US.xml' 
name, ext = os.path.splitext(oldFileName) 
newFileName = '{}{}'.format(name[name.index('-')+1:name.index('_')], ext) 
# newFileName == 'CIWS15-AAAA-A00-00-0000-00A-018A-D.xml' 

を、パターンが何か他のものであるが、パターンがあっても、あなたは私がここに持っているように、それに合うようにコーディングすることができます。

+0

より具体的な質問を更新しましたので、必要に応じて必要な変更を加えることができます。あなたの助けをありがとう – Steven

+0

私は少し私の答えを更新しましたが、長さが固定されている場合、私のソリューションはあなたのケースで動作するように十分な一般的だったと思う。しかし、最初のダッシュをフィルタリングし、最初のアンダーラインの後ろにあるすべてのものをフィルタリングして、これがフォーマットを表すものであれば、より良い解決策になると思われます。 – Matthias

+0

これは動作し、美しいコードです。ありがとうございました! – Steven

0

その素敵ではないが、あなたはすべての名前を変更したいファイルを知っていれば、私はこれが

カントーあなたのために働く願っていますが、同じ長さを持っている、あなたが試すことができます:

>>>file = 'DMC-CIWS15-AAAA-A00-00-0000-00A-018A-D_014-00_EN-US.xml' 
>>>ext = file[51:] 
>>>newFile = file[4:38]+ext 

を使用すると、印刷するときnewFileあなたが今持っている:

>>>print(newFile) 
CIWS15-AAAA-A00-00-0000-00A-018A-D.xml 
関連する問題