1

ツリーパスに基づいてファイルの名前を変更し、名前を変更したファイルを特定のフォルダー (名前に基づいて) に移動しようとしています。

たとえば、パス L:\a\b\c\d\e\f\file.pdf にファイルがあり、「file.pdf」の名前を「de f」に変更したい

また、すべてのサブフォルダーは c で分岐するため、フォルダー c に含まれるサブフォルダー内のすべてのドキュメントを python でスキャンして、前述のパターンに従って名前を変更します。つまり、L:\a\b\c\x\y\z\file.pdf の場合、file.pdf は "xy z" に名前が変更されます。L:\a\b\c\q\r\s\file.pdf、file.pdf は「qr s」に名前が変更されました。等

次に、それらのファイルをすべて、名前に基づいて、既存の新しいフォルダーに移動したいと考えています。たとえば、ファイル「de f」の場合、L:a\b\1\d\f\e に移動したいとします。

私はPythonでコーディングするのはまったく初めてで、パズルのピースをいくつか解決しましたが、多くの問題を抱えています. これが私のコードの一部ですが、あまり役に立たないと思います。

このコードでは、ファイルを .py ファイルと共に CMD にドロップする必要があります。必要な名前を吐き出します(ただし、不要な余分なスペースがあります)。実際にはファイルの名前を変更せず、コードを調べたいときにCMDにドロップした特定のファイルでのみ行われますすべてのサブフォルダーとそれを自動的に行います。私のコード (具体的には 6 ~ 7 行目) は、必要なフォルダーの実際の名前付け方法に固有のものであることに注意してください。機密上の理由からツリー パスの名前を難読化し、理解しやすくしています。

from sys import argv
script, filename = argv
txt = open(filename)
print "Here's your file %r:" % filename
string = "%r" % filename
print string [94:-17]
line = string [94:-17]
line = "%r" % line
for char in '\\':
line = line.replace (char, ' ')
print line

いくつかの宿題を行うと、このコードは必要なディレクトリ内のすべてのファイルを検索して名前を変更しますが、必要な名前が付けられません。繰り返しますが、これはあまり役に立ちませんが、私が持っているものです。

import glob, os
def rename(dir, pattern, titlePattern):
for pathAndFilename in glob.iglob(os.path.join(dir, pattern)):
title, ext = os.path.splitext(os.path.basename(pathAndFilename))
os.rename(pathAndFilename,
os.path.join(dir, titlePattern % title + ext))
rename(r'L:\a\b\c\', r'*.pdf', r'new(%s)'

そして、実際にファイルを移動するためのコードはまだ作成していません。かなり迷っています。これが大変な作業であることは理解していますが、誰かが私を助けてくれれば幸いです。

4

1 に答える 1

1

この投稿がbashの同様のソリューションを検索しているのを見つけたので、同じ道をたどる人々への回答を投稿します:

#!/bin/bash

mkdir extracted
for var in "$@"
do
    for f in `find sources -name "$var"`
    do
        groupname=`echo $f | cut -d'/' -f 3`
        filename=`echo ${f##*/}`
        cp "$f" extracted/"${groupname}_$filename" -v
    done
done
于 2014-01-24T10:39:45.223 に答える