我有一个.txt文件,其中包含多个文件路径和不同的扩展名。本质上,它是大型项目中使用的所有资源的列表。一行中经常有多个文件。
我想要做的是从此文件中获取扩展名为.png的每个文件名,并将它们放入新的文本文件中。
这样我就可以获取这个.png文件列表,并将其与我已经创建的列表进行比较,该列表在我的资源目录中获取.png的所有文件名和扩展名。
我正在使用的代码是:
resourceList = [file for file in os.listdir('.')
if file.endswith('.png')]
我的最终目标是比较文件名列表并删除资源目录中没有匹配项的所有文件。
我一直在玩re
,glob
和strip
但收效甚微。
非常感谢任何帮助。我的编程技巧充其量是公平的,而且我一直在反对这一点。谢谢!
更新#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"
答案 0 :(得分:1)
您应该查看os.path模块。它完成跨平台的所有文件路径和目录的管理。
要获取扩展名以外的文件名,请查看basename
在这种情况下,使用join将.png添加到要比较的列表中所有条目的末尾,因为这意味着文件名已完成,可以传递给删除函数。
答案 1 :(得分:0)
是啊!
我离我的最终目标更近了一步。我现在有两个列表,我可以通过比较字符串来查找哪些匹配。
在我正在使用的目录中创建.png列表:
resourceList = [file for file in os.listdir('.') if file.endswith('.png')]
要创建第二个列表,它从文本文件中的一堆文本中提取所有.pngs,我正在使用它:
with open('Resource_PNGs.txt', 'rU') as f:
for line in f:
usedPngs = (re.findall('([-\w]+\.(?:png))', f.read()))
我不知道字符串的所有不同的“通配符”字符,但它似乎是唯一这样做的。我对os.path
运气不佳,因为它给了我找到的所有其他路径。我确信我可以得到一些相同的re
魔法。
希望我的问题可以帮助别人。现在进行比较!