0

そうです、私は Python に比較的慣れていないので、私のコードに表示される可能性がありますが、正規表現内でリストを反復処理する方法はありますか?

基本的に、フォルダー内の各ファイル名をループして、ファイル名からコード (2 ~ 6 桁) を取得し、名前が添付されたテキスト ファイル内のコードのリストと比較したいと考えています。 "1234_Name" (引用符なし) の形式で。コードが両方のリストに存在する場合、リスト エントリ、つまり 1234_Name を出力したいと考えています。現在、私のコードはテキスト ファイルのリストの最初のエントリのみを参照しているように見えますが、それらすべてを調べて一致を見つける方法がわかりません。

import os, re

sitesfile = open('C:/Users/me/My Documents/WORK_PYTHON/Renaming/testnames.txt', 'r')
filefolder = r'C:/Users/me/My Documents/WORK_PYTHON/Renaming/files/'

sites = sitesfile.read()
site_split = re.split('\n', sites)


old = []
newname = []

for site in site_split:
    newname.append(site)


for root, dirs, filenames in os.walk(filefolder):
    for filename in filenames:
        fullpath = os.path.join(root, filename)
        filename_split = os.path.splitext(fullpath) 
        filename_zero, fileext = filename_split
        filename_zs = re.split("/", filename_zero)
        filenm = re.search(r"[\w]+", str(filename_zs[-1:]))#get only filename, not path
        filenmgrp = filenm.group()

        pacode = re.search('\d\d+', filenmgrp)
        if pacode:
            pacodegrp = pacode.group()
            match = re.match(pacodegrp, site)
            if match:
                 print site

これが理にかなっていることを願っています - 事前に感謝します!

4

1 に答える 1

0

したがって、代わりに次のコードを使用します。

import os
import re
def locate(pattern = r'\d+[_]', root=os.curdir):
    for path, dirs, files in os.walk(os.path.abspath(root)):
        for filename in re.findall(pattern, ' '.join(files)):
            yield os.path.join(path, filename)

..これは、指定された正規表現パターンに一致するフォルダー内のファイルのみを返します。

with open('list_file.txt', 'r') as f:
     lines = [x.split('_')[0] for x in f.readlines()]

print_out = []

for f in locate(<your code regex>, <your directory>):
    if f in lines: print_out.append(f)

print(print_out)

...最初に list_file で有効なコードを見つけてから、返されたファイルを指定された正規表現と比較します。

于 2013-08-28T22:31:23.130 に答える