これまでのところ、スクリーンショットを撮って保存するスクリプトを作成しました。しかし、私はファイルに「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))
その print ステートメントを自分のステートメントに置き換えたいと思うでしょう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 にあまり精通していません。