使用python

时间:2016-05-03 21:34:40

标签: python regex bash scripting batch-rename

我最近恢复了一个意外删除的文件夹。它有.jpg和.tar.gz文件。但是,所有文件现在都附加了某种散列扩展名,并且每个文件都有所不同。文件夹中有600多个文件。所以示例名称将是:

IMG001.jpg.3454637876876978068
IMG002.jpg.2345447786787689769
IMG003.jpg.3454356457657757876

folder1.tar.gz.45645756765876
folder2.tar.gz.53464575678588
folder3.tar.gz.42345435647567

我想有一个可以轮流使用的脚本(也许我可以指定扩展名,或者它可以有两个迭代,一个通过.jpg文件,另一个通过.tar.gz)并清理最后一个部分从。开始的文件名。就在号码前面。所以最终的文件名将以.jpg和.tar.gz结尾

到目前为止我在python中的内容:

import os

def scandirs(path):
    for root, dirs, files in os.walk(path):
        for currentFile in files:
            os.path.splitext(currentFile)

scandirs('C:\Users\ad\pics')

显然它不起作用。我将不胜感激任何帮助。我也会考虑使用bash脚本,但我不知道该怎么做。

3 个答案:

答案 0 :(得分:0)

shutil.move(currentFile,os.path.splitext(currentFile)[0])

至少我认为......

答案 1 :(得分:0)

以下是我将如何使用正则表达式执行此操作:

import os
import re

pattern = re.compile(r'^(.*)\.\d+$')


def scandirs(path):
    for root, dirs, files in os.walk(path):
        for currentFile in files:
            match = pattern.match(currentFile)
            if match:
                os.rename(
                    os.path.join(root, currentFile),
                    os.path.join(root, match.groups(1)[0])
                )

scandirs('C:/Users/ad/pics')

答案 2 :(得分:0)

由于您使用标记,我会给您一个答案,删除目录中所有文件/目录的最后一个扩展名:

<?php

//This is your json string
$string = {"57690":{"success":true,"data":{"type":"game","name":"Tropico 4: Steam Special Edition"...

//Turn JSON string into object
$data = json_decode($string);

//Turn your object into an array (easier to work with in this case)
$data = (Array)$data;

//Get name of item with "57690" key
$name = $data["57690"]->data->name;

//Echo the name
echo($name);

//You can also echo out all names of all items like this:
foreach($data as $key => $item)
{
    echo($item->data->name);
}