Sprawdzenie czy podciąg znajduje się w linijce w pliku tekstowym

0

Witam,
zaczynam studia informatyczne i zabieram się za naukę programowania.
Nie ukrywam, że jestem laikiem więc liczę na wyrozumiałość.
Napisałem kod w którym dodawane są poszczególne dane do pliku txt (każda dana w osobnej linijce)
Teraz chciałbym aby mi ktoś pokazał jak napisać kod gdzie użytkownik po wpisaniu np: Apple
sprawdzi czy znajduje się taka linijka z wyrazem Apple i wyrzuci czy jest taka dana czy nie w tym pliku txt

3

Z czym masz problem?

  • Otwarcie pliku
  • Wczytanie kolejnego wiersza
  • Porównanie z podanym napisem
  • Wypisaniem wyniku
  • Niechęcią do nauki
1

Rozwiązanie #1:

  1. Wczytaj plik do str
  2. Podziel go na linijki (np split()) do list
  3. Sprawdź czy dane słowo "Apple" znajduje się w liście

Rozwiązanie #2:

  1. Wczytaj plik do str
  2. Sprawdź czy istnieje w nim ciąg pasujący do wyrażenia regularnego /^Apple$/m
0

#Edit:1
Może będzie łatwiej.
Tak wygląda mój kod

dana1 = input ("Wpisz dane1: ")
dana2 = input ("Wpisz dane2: ")

file = open("Dane1.txt","a")

file.write(dana1 + "\n")
file.write(dana2 + "\n")

file.close()

file = open("Dane1.txt")

for plik in file:
  print(plik.count('Apple'))

I naprawdę nie wiem co dalej...
Na konsoli dało mi wartość 1 wiec znalazł taki tekst, ale chciałbym aby mi ktoś powiedział jak to zdefiniować jako if
Czyli jeżeli to słowo jest to... a jeżeli go nie ma to...
Będę wdzięczny jeżeli ktoś mógłby mi napisać komendę do tego bo naprawę nie wiem jak to wywołać.

1
def file_contains_line(filename: str, substring: str)
  with open(filename) as file:
    content = file.read()
    lines = content.split("\n")
    return substring in lines

if file_contains_line("Dane1.txt", "Apple"):
  pass
0

@zbyszek007:

linijka z wyrazem Apple

Co to znaczy, jak będzie linia, asddApplejfkehjf ma zwrócić, True? A może nie, może ma być, hahaxd Apple bad , albo, hahaxd Apple.?

1
zbyszek007 napisał(a):

zaczynam studia informatyczne i zabieram się za naukę programowania.> Nie ukrywam, że jestem laikiem więc liczę na wyrozumiałość.

Serio? Z deka późno.
Na takie zadanie znam wielu nastolatków ze średniej, którzy mają w paluszku.

zbyszek007 napisał(a):

Napisałem kod w którym dodawane są poszczególne dane do pliku txt (każda dana w osobnej linijce)

zbyszek007 napisał(a):
dana1 = input ("Wpisz dane1: ")
dana2 = input ("Wpisz dane2: ")

... 

file.write(dana1 + "\n")
file.write(dana2 + "\n")

```> 

"poszczególne dane" a dwie i tylko dwie dane, to ogromna różnica. jako aspirujacy do programisty musisz myśleć nie tylko konkretnie, ale i abstrakcyjnie. "poszczególne" dla każdego w miare biegłego w języku logiczno-matematycznym to elementy ze zbioru, kolekcji, listy, tablicy, a nie dwie i tylko dwie, nie mające ze sobą nic wspólnego dane
Podobnie stwierdzenia "każda", to nie "dwie i tylko dokładnie dwie"
"każda" to od 1 do dowolnej ilosci (powyżej 5 klasy podstawówki od zera do dowolnej)

zbyszek007 napisał(a):
file = open("Dane1.txt")

for plik in file:
  print(plik.count('Apple'))

Tu sam siebie okłamujesz. Elementem file (angielskie słowo) który możesz wyliczać, nie jest plik (to samo, ale polskie słowo), ale line / linia itd
Zła nazwa zmiennej najszybciej skopi autora, utrudniając mu myślenie

Gdyby przyjąć zapis, który nie kłamie, a jedynkę jako pozytywny warunek (tożsamy z true), zmieniamy na:

for line in file:
  if line.count('Apple'))>0 :
     print "Jest"
  else:
     print "Nie wiem czy jest"

Zostawiam przyjemność pozbycia się głupiego wyniku z else, podpowiem że tzreba zmienną o sensie logicznym.
Wydzielenie do funckji jak proponuje @Riddle jest bardzo dobre, wśród pozytywnych efektów jest jaśniejsze od zmiennej logicznej - choc tam jest niuans
Życze na nowej drodze życia determinacji by to robić dobrze, a nie po łebkach jak do tej pory

Riddle napisał(a):
def file_contains_line(filename: str, substring: str)
  with open(filename) as file:
    content = file.read()
    lines = content.split("\n")
    return substring in lines

if file_contains_line("Dane1.txt", "Apple"):
  pass

W tym fragmencie zakładasz, ze >linia jest równa "Apple"<, gdzie moje odczytanie zadania brzmi >linia zawiera "Apple"<

0
ZrobieDobrze napisał(a):

W tym fragmencie zakładasz, ze >linia jest równa "Apple"<, gdzie moje odczytanie zadania brzmi >linia zawiera "Apple"<

Jeśli pytanie dotyczy "linia zawiera "Apple"" to cały ten "program" to jest sprawdzić "Apple" in file.read().

0

Jak dokładnie brzmi zadanie:

  • Sprawdzić czy plik zawiera "Apple"?
  • Policzyć ile razy plik zawiera "Apple"?*
  • Policzyć ile razy każdy wiersz zawiera "Apple"?

Na dodatek czy "case-sensitive" czy nie?

1 użytkowników online, w tym zalogowanych: 0, gości: 1