到目前为止,我已经编写了一个脚本来截取屏幕截图并保存它们。但我希望将文件命名为“snap”,后跟一个数字(例如 snap1.jpg、snap2.jpg、snap3.jpg)。计划是在每次脚本执行时制作一张新图片。这是当前脚本:
import ImageGrab
img = ImageGrab.grab()
img.save('snap1.jpg','JPEG')
import os
import sys
basename = sys.argv[1]
# for each file in the current directory, check if its name starts with basename
# if it does, split on basename this will yield ['', N] where N is the number in the filename
# call int on the number since it is currently a string
numbers = [int(f.split(basename)[1]) for f in os.listdir('.') if f.startswith(basename)]
last_number = max(numbers) # I broke this up so it was easier to see
new_name = "%s%03d.jpg" % (basename, last_number + 1)
print new_name
笔记。
享受。
只需将其放入循环中,每次截取屏幕截图时都会增加一个计数器。
i = 1
while (condition):
ImageGrab.grab()
img.save('snap'+str(i)+'.jpg','JPEG')
但是,由于您只想简单地运行应用程序并让它知道如何命名,您总是可以创建另一个文件来保存您所在的号码。假设您调用它screen.txt
并在此文件中只放一个零。现在将您的代码修改为:
f = open('screen.txt')
i = int(f.read())
f.close()
print ('snap'+str(i)+'.jpg')
f = open('screen.txt', 'w')
i+=1
f.write(str(i))
您需要用您的声明替换该打印img.save
声明。这应该有效,并且非常容易理解。
文件名的生成可能很简单
i = 1 # somewhere above the grabbing
filename = 'snap%i.jpg' % i
i += 1
img.save(filename, 'JPEG')
itertools
提供了一个不错的计数器生成器,所以你可以这样做
import itertools
filecounter = itertools.count(1)
filename = 'snap%i.jpg' % filecounter.next()
拥有计数器的好处是您可以将其发送到其他函数,而无需费心将状态传回。您可能还想构造一个函数来根据已经存在的文件找出下一个文件名,但这有点复杂。
如果您每次运行脚本时都保存到同一个目录,那么您可以检查目录中是否有名为 /snap[0-9]+.jpeg/ 的文件(即名为 snap 的文件,后跟一个数字,然后通过“.jpg”)并将新文件命名为下一个可用文件名。所以这样的事情应该有效:
import os
import ImageGrab
import re
snapPattern = re.compile('snap([0-9]+)\.jpeg')
usedNumbers = []
fileList = os.listdir('.')
for filename in fileList:
m = snapPattern.match(filename)
if( m ):
usedNumbers.append( m.group(1) )
usedNumbers.sort()
i = 0
while usedNumbers.count( str(i) ):
i++
img = ImageGrab.grab()
img.save('snap'+str(i)+'.jpg','JPEG')
如果我搞砸了,我提前道歉,我对 Python 不是很精通。