1

我有一个 .txt 文件,其中包含多个文件路径和不同的扩展名。本质上,它是一个大型项目中使用的所有资源的列表。一行通常有多个文件。

我想要做的是从此文件中获取扩展名为 .png 的每个文件名,并将它们放入一个新的文本文件中。

这样我就可以获取这个 .png 文件列表,并将它与我已经创建的列表进行比较,该列表在我的资源目录中获取 .png 的所有文件名和扩展名。

我用于该部分的代码是:

resourceList = [file for file in os.listdir('.') 
                if file.endswith('.png')]

我的最终目标是比较文件名列表并从资源目录中删除所有不匹配的文件。

我一直在玩re, globstrip但收效甚微。

任何帮助将不胜感激。我的编程技能充其量是公平的,我已经为此苦苦挣扎了一段时间。谢谢!

更新#2

with open('Resource_PNGs.txt') as f:
    for line in f:
        if '.png' in line:
            (head, tail) = os.path.split(line)
            print('%s' % (tail))

澄清: 我发现的资源列表是从目录中取出的文件名列表。示例: 'Button.png', 'Switch.png', etc。我遇到的一个问题是从 Visual Studio 中对“* .png”进行的搜索中复制的文本文件,所以我有 .png 与路径、其他一些 C++ 垃圾和 filename.png 一起引用的文件我正在寻找捕捉。我最终想比较这两个列表,看看哪些文件不匹配。这些行看起来像这样:

  C:\BaseProjects\Source\FileManagerGeneralSettings.qml(86):        buttonImageName: imgDirUrlString + "/WizBack_titleBar.png"
  C:\BaseProjects\Source\FileSendPage.qml(35):            source: imgDirUrlString + "/TabEmpty.png"
  C:\BaseProjects\Source\FileSendPage.qml(224):                buttonIcon: imgDirUrlString + "/DialogConfirm.png"
4

2 回答 2

1

您应该查看os.path模块。它完成跨平台文件路径和目录的所有管理。

要获取除扩展名之外的文件名,请查看 basename

在这种情况下,使用 join 将 .png 添加到要比较的列表中所有条目的末尾,因为这意味着文件名是完整的并且可以传递给删除函数。

于 2013-05-16T16:04:45.617 回答
0

是的!

我离我的最终目标又近了一步。我现在有两个列表,我可以通过比较字符串进行迭代以查找匹配的字符串。

要在我正在使用的目录中创建 .pngs 列表:

resourceList = [file for file in os.listdir('.') if file.endswith('.png')]

要创建第二个列表,它将所有 .png 从文本文件中的一堆文本中提取出来,我正在使用这个:

with open('Resource_PNGs.txt', 'rU') as f:
    for line in f:
        usedPngs = (re.findall('([-\w]+\.(?:png))', f.read()))

我不知道字符串的所有不同“通配符”字符,但它似乎是唯一这样做的。我运气不好,os.path因为它给了我找到的所有其他路径。我敢肯定,我可以用一些相同的re魔法得到它。

希望我的问题可以帮助其他人。现在开始比较!

于 2013-05-17T17:10:49.160 回答