Dosyaya bir yazının daha önce yazılıp yazılmadığı nasıl kontrol edilir?

Arkadaşlar merhaba.

Bir barkod okuma sistemi yaptım ve bu sistem, okunan barkodları TXT dosyasına yazdırıyor. Ben, daha önce yazılan barkodu bir daha yazmamasını istiyorum.

Mesela daha önce 000000 diye bir barkod kaydettiysem ve kameraya tekrardan 000000 barkodu okutursam yazmayacak. Olay bu.

Nasıl yapabilirim?

        dosya = open("barcode.txt", "a")
        dosya.write(barcode_info +"\n")

Bu kodla denedim fakat bu seferde hiçbir şey yazmıyor dosyaya:

        okumad = open("barkodlar.txt", "r")
        for x in okumad:
            if barcode_info == x:
                print("Bu barkod zaten kayıtlı")
                break
            else:
                dosya.write(barcode_info +"\n")
        dosya = open("barkodlar.txt", "r+")
        barkodlar = dosya.readlines()
        durum = True
        for barkod in barkodlar:
            if barcode_info == barkod[:-1]:
                durum = False
        
        if durum is True:
            dosya.write(barcode_info + "\n")
        else:
            print("Bu barkod zaten kayıtlı.")
  

        dosya.close()
  1. Hem yazma hem de okuma işlemleri gerçekleştirmek için dosyayı “r” ile değil de “r+” ile açmalısınız.
  2. Dosyadan çektiğiniz her bir satırın sonunda “\n” yer alacağı için, karşılaştırma yaparken buna dikkat etmelisiniz.
  3. Dosya ile alakalı işlemler bittikten sonra dosyayı kapatmaya özen göstermelisiniz.
3 Beğeni

Teşekkür ederim yanıt için. Hiçbir şey yazmadı hocam dosya’ya.

Düzenlediğiniz kodu gördüm, bu sefer oldu; teşekkür ederim.

2 Beğeni

barkodlar.txt:

000000
153485
334951
123456

Sorgulama işlemi:

import getpass
file  = "C:\\Users\\"+getpass.getuser()+"\\Desktop\\barkodlar.txt"
barkod_sorgu = input("Barkod Numarası Girin => ")

def barkod_sisteme_yaz(x,file):
   with open(file,"a") as g:
      g.write(x+"\n")
   print(f"{x} sisteme yazıldı")

def barkod_sorgulama(file):
   with open(file,"r") as f:
      ff = f.readlines()
   for i in ff:
      if barkod_sorgu in i:
         print(f"{barkod_sorgu} numaralı barkod sistemde yer alıyor")
         break
   if not barkod_sorgu in i:
      print(f"{barkod_sorgu} numaralı barkod sistemde bulunmuyor.")
      barkod_sisteme_yaz(barkod_sorgu,file)

barkod_sorgulama(file)

var olan barkodları sorgulattığımızda barkod sistemde yer alıyor, eğer sistemde yoksa barkod sistemde bulunmuyor. dedikten sonra üstteki fonksiyon çağırılıyor(gerekli parametrelerle)

@Gok_Mavisi_Anka çok temiz yazmışsınız hocam
@Grata bence güzel bir simülasyon örneği olabilir bunlar

3 Beğeni
class BarkodSistemi():
    def __init__(self, dosya):
        self.dosya = dosya
        self.data = set(self.dosya.read().split("\n"))

    def barkod_sorgula(self, barkod):
        return barkod in self.data

    def barkod_ekle(self, barkod):
        if not self.barkod_sorgula(barkod):
            self.data.add(barkod)
            self.dosya.write(barkod + "\n")


import os

dosya = "barkodlar.txt"
kip = "w+" if not os.path.exists(dosya) else "r+"
    
with open(dosya, kip) as f:
    sistem = BarkodSistemi(f)
    sistem.barkod_ekle("123456")
    sistem.barkod_ekle("123456")
    sistem.barkod_ekle("000000")
    sistem.barkod_ekle("111111")
5 Beğeni

Burası "a+"'ya denk midir?

a+'nın imleci dosyanın sonuna koyuyor olması lazım, yani hayır.

2 Beğeni