使用非静态文件名的一部分来创建新目录

时间:2016-11-04 23:43:13

标签: python

我是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...

这会找到包含任何结尾的文件,但是我似乎无法理解如何保存文件的名称或路径(无论它是什么)。

2 个答案:

答案 0 :(得分:0)

要在python中获取子字符串,请使用切片运算符。

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

str.split也非常强大。

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

我会经常用两者的组合来解决你所描述的问题。但是对于非常棘手的解析问题,有正则表达式。

>>> 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'

正如您所看到的,正则表达式有很多。除非我有一个非常复杂的问题,否则我会避免使用它们。

您可能会发现另外两个有用的功能。 os.path模块有.split(),它将路径分成基本目录,文件名和.splitext()将分割最后一个“。”的路径,返回扩展名和路径的其余部分

答案 1 :(得分: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)

我在最后添加了print以显示它创建的内容。