2016-11-04 5 views
0

私はPythonには新しく、いくつかのことを理解しようとしています。静的でないファイル名の部分を使って新しいディレクトリを作成する

私は既にshutil.copy.moveの機能を使用して、globのファイルをスキャンすることを学んでいます。しかし、私が直面しているシナリオでいくつか質問があります:

毎日同じディレクトリに置かれるが、ファイル名の半分が毎日変更され、それを使って宛先フォルダを作るファイルを見つけるか、それをzipfileで圧縮してください。

例:

  • ファイルX110616.Filename_110416.txtは今日に入っています。
  • 明日はX110616.Filename_110423.txtになります。

名前の半分または一部が毎日変更されるため、関数またはモジュールの文字列の特定の部分をコピーして保存先フォルダまたはzipファイルを作成するにはどうすればよいですか?

globモジュールを使用して、ワイルドカード変数を含むファイルをスキャンできます。rstrip()を試してみましたが、文字列の先頭または中央ではなく最後の半分だけが削除されているようです。

また、変数を保存する方法や、ディレクトリやzipファイルを作成する場所を特定する方法もわかりません。ボトムラインは、私は他のもののためにそれらの文字を保存する/使用しているときにそれを取るためにどのような方向を確認してください文字列に非静的な文字を探したがないようにスクリプトに指示する方法を知っている:

import glob 

    for f in glob.glob("C:\\users\%username%\\Documents\\Test_Files\\X??????.Filename_??????.txt"): 
     Newdir = f 
     print(Newdir) 
     #or use to make a directory, or zip file... 

これは私を見つけるだろうしかし、私はファイルの名前やパスを(どのようなものでも)保存する方法を理解できないようです。

答えて

0

pythonで部分文字列を取得するには、slice演算子を使用します。

>>> a = "Hello World" 
>>> a[0:5] 
'Hello' 

str.splitも非常に強力です。

>>> a.split(" ") 
['Hello', 'World'] 

私はしばしば2つの組み合わせで説明するような問題を解決します。しかし、本当に面倒な構文解析の問題には、正規表現があります。

>>> b = "whatsit__blah.foo" 
>>> import re 
>>> result = re.search("(?P<first>[a-z]+)__(?P<second>[a-z]+).(?P<ext>[a-z]+)", b) 
>>> result.groups() 
('whatsit', 'blah', 'foo') 
>>> result.groups("first") 
('whatsit', 'blah', 'foo') 
>>> result.group("first") 
'whatsit' 
>>> result.group("second") 
'blah' 
>>> result.group("ext") 
'foo' 

正規表現には多くのものがあります。複雑さが増したため、私は非常に複雑な問題がなければそれらを避けました。

さらに便利な機能が2つあります。 os.pathモ​​ジュールには.split()があり、これはパスをベースディレクトリとファイル名に分割し、.splitext()は最後の "。"のパスを分割し、拡張子と残りのパスを返します。

+0

素晴らしい!私はこれを試さなければならない。しかし、私が使用したいファイルが、スクリプトの場所以外のディレクトリにある場合、私はまだファイルパスを与える必要がありますか? (つまり、a = "C:¥¥Users¥%username%¥¥documents¥¥dxxxx.xxx.xxx")、a = [14:19] = dxxxx – AdagioYours

+0

また、分割に役立つos.path.splitパスからのファイル名。 – intrepidhero

0

私がやったことはここにあり、それは働いていたようです。特定のディレクトリにあるファイルごとにフォルダを作成し、ファイル名の特定の部分のみを使用してファイル名を反映するフォルダを作成しました。

destdir = "C:\\Users\\%USERNAME%\\Documents\\Test_Files\\test\\" 
srcpath = "C:\\download\\" 
for z in os.listdir("C:\\download"): 
    if z.endswith("FILE.FILENAME.ZIP"): 
     os.mkdir(destdir + z[0:7]) 
     newdir = destdir + z[0:7] 
     print(newdir) 

最終的に何が作成されたかを示すために印刷が追加されました。

関連する問題