Python 写入文本文件并避免重复值
Python writing to text file and avoiding duplicate values
我目前在将哈希值保存到 txt 文件时遇到困难。
我从我从 reddit 下载的每张图片中获取一个哈希值,我希望将这个哈希值存储到一个 txt 文件中(如果它不在 txt 文件中的话)。
如果图像的哈希值已经在 txt 文件中,它不会 post 它再次出现在 txt 文件中(没有重复的哈希值)并且它会删除图像。
但是,我很难做到这一点,因为它会多次添加相同的散列。
def checkImage():
database_file = "hash_database.txt"
for filename in os.listdir('NewImages//'):
upload = file_path + '\' + filename
# Get hash of each image
for filename in os.listdir('NewImages//'):
new_images = imagehash.phash(Image.open('NewImages//' + filename))
with open(database_file, "r") as f:
read_database = f.readlines()
for line in read_database:
if line == str(new_images):
print("Delete this image, hash is already in database")
os.remove(upload)
else:
print("Save this image. Adding hash to database")
with open(database_file, "a") as f:
f.write(str(new_images) + "\n")
checkImage():
我的数据库图片:
如您所见,有多个相同的哈希值。
如有任何帮助,我们将不胜感激!
line
末尾有换行符 \n
,因此您将 "abcde"
与 "abcde\n"
进行比较,两者不相等。
您可以使用 .strip()
删除换行符:
for line in read_database:
line = line.strip()
if line == str(new_images):
...
更新:
此外,else
块的逻辑是错误的。如果哈希与文件中的 current 行不匹配,则将其视为新哈希,但只有当它与 any[ 不匹配时才应这样做=27=] 文件中的行。
我目前在将哈希值保存到 txt 文件时遇到困难。
我从我从 reddit 下载的每张图片中获取一个哈希值,我希望将这个哈希值存储到一个 txt 文件中(如果它不在 txt 文件中的话)。
如果图像的哈希值已经在 txt 文件中,它不会 post 它再次出现在 txt 文件中(没有重复的哈希值)并且它会删除图像。
但是,我很难做到这一点,因为它会多次添加相同的散列。
def checkImage():
database_file = "hash_database.txt"
for filename in os.listdir('NewImages//'):
upload = file_path + '\' + filename
# Get hash of each image
for filename in os.listdir('NewImages//'):
new_images = imagehash.phash(Image.open('NewImages//' + filename))
with open(database_file, "r") as f:
read_database = f.readlines()
for line in read_database:
if line == str(new_images):
print("Delete this image, hash is already in database")
os.remove(upload)
else:
print("Save this image. Adding hash to database")
with open(database_file, "a") as f:
f.write(str(new_images) + "\n")
checkImage():
我的数据库图片:
如有任何帮助,我们将不胜感激!
line
末尾有换行符 \n
,因此您将 "abcde"
与 "abcde\n"
进行比较,两者不相等。
您可以使用 .strip()
删除换行符:
for line in read_database:
line = line.strip()
if line == str(new_images):
...
更新:
此外,else
块的逻辑是错误的。如果哈希与文件中的 current 行不匹配,则将其视为新哈希,但只有当它与 any[ 不匹配时才应这样做=27=] 文件中的行。