Moja lista nie działa poprawnie, ponieważ została utworzona jako ["'carrots, 'tomatoes', 'lettuce'"], a nie ['carrots, 'tomatoes', 'lettuce']

Mam plik tekstowy z 'carrots, 'tomatoes', 'lettuce' zapisanym w jednym wierszu i tak piszę go na mojej liście:

veggie_list =[]
x = open('veggies.txt','r')
for item in x:
    veggie_list.append(item)
2
4Looped 3 kwiecień 2020, 17:01

4 odpowiedzi

Najlepsza odpowiedź

Spróbuj tego (zakładając, że plik tekstowy zawiera wiele wierszy):

veggie_list = []
with open('veg.txt','r') as x:
    for item in x:
        veggie_list.extend(item.replace("'", "").split(','))

print(veggie_list)

Wyjścia:

['carrots', ' tomatoes', ' lettuce']

Jeśli interesuje Cię tylko pierwsza linia pliku tekstowego:

veggie_list = []
with open('veg.txt','r') as x:
    veggie_list = x.read().replace("'","").split(',')

print(veggie_list)

One Liner w Pythonie przy użyciu rozumienia list:

with open('veg.txt','r') as x:
    print([j for i in x for j in i.replace("'","").split(',')])

WYJAŚNIENIE (dla pierwszego kodu):

Musisz najpierw usunąć pojedyncze cudzysłowy z przeczytanego wiersza ("'carrots', 'tomatoes', 'lettuce'") z pliku. Możesz użyć replace () metody {{X1} } obiekt. Ta metoda zwraca kopię zmodyfikowanego ciągu i nie zmienia oryginalnego ciągu.

Następnie powinieneś pozostać ze str "carrots, tomatoes, lettuce". Teraz użyłem metody split (), aby podzielić cały ciąg na pojedyncze ciągi, używając "," jako separatora.

Ta metoda zwraca listę ['carrots', ' tomatoes', ' lettuce'].

1
abhiarora 3 kwiecień 2020, 14:28

Mam pomysł, ale to zależy i sposobu, w jaki jest zapisany Twój plik tekstowy:

veggies = []
veggie_list = []
x = open('veggies.txt','r')
for item in x:
    veggie.append(item)
for i in veggies:
    veggie_list.append(i)

Tak jest prawdopodobnie. Twoje zewnętrzne nawiasy mogą sygnalizować, że ["'carrots, 'tomatoes', 'lettuce'"] to prawdopodobnie tylko jedna pozycja na liście. Jeśli powtórzysz to dwukrotnie, może zadziałać. Mam nadzieję, że to pomoże

0
Shashwath Thiyagarajan 3 kwiecień 2020, 14:20

Możesz przekonwertować listę na ciąg znaków i zamienić „na spację, a następnie użyć eval , co zwróci listę

veggie_list =[]
x = open('veggies.txt','r')
for item in x:
    veggie_list.append(item)
veggie_list = eval(str(veggie_list).replace('"',''))
1
deceze 3 kwiecień 2020, 15:06

Wstawiasz Ciąg "'marchewki,' pomidory ',' sałata '". Myślę, że chcesz:

text = x.read()
text = text.replace("'","")
enter code here
veggie_list = text.split(",")
1
Hygrasiel 3 kwiecień 2020, 14:07