2

到目前为止,我已经编写了一个脚本来截取屏幕截图并保存它们。但我希望将文件命名为“snap”,后跟一个数字(例如 snap1.jpg、snap2.jpg、snap3.jpg)。计划是在每次脚本执行时制作一张新图片。这是当前脚本:

import ImageGrab
img = ImageGrab.grab()
img.save('snap1.jpg','JPEG')
4

4 回答 4

4
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

笔记。

  • 使用“。” 又名当前目录作为位置,根据需要更新。
  • new_name 的写法类似于 snap003.jpg。再次,根据需要进行调整。零有助于文件列表排列

享受。

于 2012-10-13T04:21:23.767 回答
1

只需将其放入循环中,每次截取屏幕截图时都会增加一个计数器。

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声明。这应该有效,并且非常容易理解。

于 2012-10-13T03:56:57.667 回答
1

文件名的生成可能很简单

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()

拥有计数器的好处是您可以将其发送到其他函数,而无需费心将状态传回。您可能还想构造一个函数来根据已经存在的文件找出下一个文件名,但这有点复杂。

于 2012-10-13T04:25:08.900 回答
1

如果您每次运行脚本时都保存到同一个目录,那么您可以检查目录中是否有名为 /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 不是很精通。

于 2012-10-13T04:30:32.383 回答