Python:我想创建一个连续命名文件的截图脚本

时间:2012-10-13 03:50:28

标签: python file jpeg

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

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

4 个答案:

答案 0 :(得分: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类似。再次,根据需要进行调整。零可以帮助文件列表排队

享受。

答案 1 :(得分: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语句替换该print语句。这应该有效,并且非常容易理解。

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

拥有计数器的优势在于您可以将其发送到其他功能而无需将状态转移回来。您可能还需要构建一个函数来根据已存在的文件找出下一个文件名,但这样做更多一些。

答案 3 :(得分: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并不十分精通。