Jestem początkującym w Pythonie i Regex. Mam listę: [cat,dog,bird,duck]
Jeśli kota na liście powinna dodać "zwierzę" do istniejących zwierząt domowych () w ramach parantezy, jak: zwierzęta (zwierzę) Jeśli kota i psa na liście, powinna być: zwierzęta (zwierzę, zwierzę)
Plik tekstowy:
My favourite pets
pets()
Oczekiwany plik tekstowy:
My favourite pets
pets(animal,animal)
Kodowanie
import re
list=['cat','dog','bird','cow']
with open('te.txt','r+') as f:
a = [x.rstrip() for x in f]
if 'cat' in list:
item='animal'
add=(r'^pets (.*)', item)
f.write('pets(' + item)
if 'dog' in list:
item='animal'
add=(r'^pets (.*)', item)
f.write('pets(' + item)
Poszedłem do tego, co robiłem, pomóż mi naprawić mój kod.answers zostaną docenione!
2 odpowiedzi
Brzmi jak tekst znajdź w swoim pliku i zastąp go, możesz użyć str.replace
i przepisać go;
plik tekstowy:
My favourite pets
pets()
listAnimal = ['cat', 'dog', 'bird', 'cow']
with open('te.txt','r+b') as f:
listsAppendAnimal = []
text = 'pets('
if 'cat' in listAnimal:
listsAppendAnimal.append('animal')
if 'dog' in listAnimal:
listsAppendAnimal.append('animal')
allText = f.read()
allText = allText.replace('pets()', 'pets(' + ', '.join(listsAppendAnimal) + ')') # or use re python
f.seek(0)
f.truncate()
f.write(allText)
f.close()
Plik tekstowy wyjściowy:
My favourite pets
pets(animal,animal)
Do użycia REGEX;
import re
listAnimal = ['cat', 'dog', 'bird', 'cow']
with open('te.txt','r+b') as f:
listsAppendAnimal = []
text = 'pets('
if 'cat' in listAnimal:
listsAppendAnimal.append('animal')
if 'dog' in listAnimal:
listsAppendAnimal.append('animal')
allText = f.read()
allText = re.sub(r'pets\(.*?\)', 'pets(' + ', '.join(listsAppendAnimal) + ')', allText)
f.seek(0)
f.truncate()
f.write(allText)
f.close()
-
Pozdrowienia,
Nie wiem, dlaczego używasz wyrażeń regularnych. Możesz po prostu przeczytać plik tekstowy, usunąć tekst My favourite pets
i pets()
z ciągiem krojenia, skonstruuj listę i zapisz go do pliku. Nie jest wystarczająco skomplikowany, aby wymagać wyrażeń regularnych.
Oto szybka alternatywa, z którą wymyśliłem:
MY_NEW_LIST = ['cat', 'dog', 'bird', 'cow']
ANIMAL_PETS = ['cat', 'dog']
PETS_FILE = 'animals.txt'
# open the existing file, and get the line with `pets(…)`
with open(PETS_FILE, 'r+') as f:
existing_animal_str = f.readlines()[1]
# get the list of animals from `pets(…)`
existing_animals = pets_line[5:-1]
list_of_animals = [i for i in existing_animals.split(',') if len(i) > 0]
# add the new animals to the list
for pet in ANIMAL_PETS:
if pet in MY_NEW_LIST:
list_of_animals.append('animal')
# construct a new string to put back into `pets(…)`
final_animal_str = ', '.join(list_of_animals)
# write the new string back to the file
with open(PETS_FILE, 'w+') as f:
f.write('My favourite pets\npets(%s)' % final_animal_str)
Pierwsze trzy linie zawierają niektóre stałe: lista zwierząt, lista zwierząt, dla których dodajemy animal
do linii pets()
oraz nazwę pliku tekstowego.
W boku notatka nazwy zmiennych mogą zrobić z pewną pracą. Jak list
jest nazwą wbudowanej funkcji, a add
jest bardzo ogólna, używając nazw zmiennych, takich jak spowoduje problemy w linii. Używaj bardziej szczegółowych nazw zmiennych.
Podobne pytania
Nowe pytania
python
Python to wielozadaniowy, wielozadaniowy język programowania dynamicznie typowany. Został zaprojektowany tak, aby był szybki do nauczenia się, zrozumienia i użycia oraz wymuszania czystej i jednolitej składni. Należy pamiętać, że Python 2 oficjalnie nie jest obsługiwany od 01-01-2020. Mimo to, w przypadku pytań Pythona specyficznych dla wersji, dodaj znacznik [python-2.7] lub [python-3.x]. Korzystając z wariantu Pythona (np. Jython, PyPy) lub biblioteki (np. Pandas i NumPy), należy umieścić go w tagach.