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
asey raam 16 sierpień 2014, 12:14

2 odpowiedzi

Najlepsza odpowiedź

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,

0
Kitsune Meyoko 16 sierpień 2014, 09:18

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.

0
alexwlchan 16 sierpień 2014, 08:35