4

「a1.txt」、「a2.txt」、「a3.txt」、「a4.txt」、「a5.txt」などの名前のファイルがあります。次に、「a1_1998」、「a2_1999」、「a3_2000」、「a4_2001」、「a5_2002」などの名前のフォルダーがあります。

たとえば、ファイル「a1.txt」とフォルダ「a1_1998」を接続したいと思います。(これを行うには定期的な表現が必要になると思います)。次に、shutilを使用して、ファイル「a1.txt」をフォルダ「a1_1998」に移動し、ファイル「a2.txt」をフォルダ「a2_1999」に移動します。

私はこのように始めましたが、定期的な表現についての理解が不足しているために行き詰まっています。

import re
##list files and folders

r = re.compile('^a(?P') 
m = r.match('a') 
m.group('id')

##
##Move files to folders

以下の答えを少し変更して、shutilを使用してファイルを移動し、トリックを実行しました。

import shutil
import os
import glob 

files = glob.glob(r'C:\Wam\*.txt')

for file in files: 
    # this will remove the .txt extension and keep the "aN"  
    first_part = file[7:-4]
    # find the matching directory 
    dir = glob.glob(r'C:\Wam\%s_*/' % first_part)[0]
    shutil.move(file, dir)
4

2 に答える 2

6

このための正規表現は必要ありません。

このようなものはどうですか:

import glob
files = glob.glob('*.txt')
for file in files:
    # this will remove the .txt extension and keep the "aN" 
    first_part = file[:-4]
    # find the matching directory
    dir = glob.glob('%s_*/' % first_part)[0]
    os.rename(file, os.path.join(dir, file))
于 2012-10-17T08:48:00.720 に答える
0

InbarRoseの提案を考慮したわずかな代替案。

import os
import glob

files = glob.glob('*.txt')
dirs = glob.glob('*_*')

for file in files:
  filename = os.path.splitext(file)[0]
  matchdir = next(x for x in dirs if filename == x.rsplit('_')[0])
  os.rename(file, os.path.join(matchdir, file))
于 2012-10-17T10:17:26.743 に答える