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

その print ステートメントを自分のステートメントに置き換えたいと思うでしょう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 に答える