2014-04-09 2 views
0

у меня есть:Как разбить строку на разные значения?

file=open("file.txt","r") 

и файл в виде:

apple\red\3 months 
pear\green\4 months 

Как разбить файл так это делается в виде списка:

fruit = ['apple', 'pear'] 
colour = ['red','green'] 
expire = ['3 months', '4 months'] 

У меня нет абсолютно никакой идеи и я буду очень благодарен за помощь. То, что я есть сейчас:

file = open('file.txt','r') 
for i in file: 
    i.readline() 
    i.split('\ ') 

не знаю, что это правильно, но понятия не имею, когда я разделить его в виде:

apple 
red 
3 months 
pear 
green 
4 months 

Как сделать первое и каждый 3-й ряд после этого в список, а 2: th и каждый 3-й после этого и так далее.

ответ

1

Вы можете сделать это следующим образом:

s = ['apple\red\3 months', 'pear\green\4 months'] 

fruit = [i[0] for i.split('\\') in s] 
colour = [i[1] for i.split('\\') in s] 
expire = [i[2] for i.split('\\') in s] 
3

Вы можете разбить строку и добавить каждую часть в виде списка. Например:

fruit = [] 
colour = [] 
expire = [] 

file = open('file.txt','r') 
for i in file: 
    fruit_, colour_, expire_ = i.split('\\') 
    fruit.append(fruit_) 
    colour.append(colour_) 
    expire.append(expire_) 
+1

Вы могли бы упростить 'fruit_, colour_, expire_ = i.split ("\\") ', затем' append', используя более значимые имена переменных, хотя это приведет к возникновению ошибки, если строка не соответствует ожиданиям. – jonrsharpe

+0

@jonrsharpe yep. Готово. Спасибо! – locoyou

+0

Если OP хочет добавить больше информации в каждую строку, это не очень расширяемо. –

0
for l in open("i.txt"): 
    for m in l.split('\\'): 
     print(m.strip()) 
0

Вы ладится.

fruit = [] 
color = [] 
expire = [] 
file = open('file.txt','r') 
for i in file: 
     i.readline() 
     f, c, exp = i.split('\\') 
     fruit.append(f) 
     color.append(c) 
     expire.append(exp) 
0

Использование zip с *:

>>> s = r'''apple\red\3 months 
pear\green\4 months''' 
>>> zip(*(x.rstrip().split('\\') for x in s.splitlines())) 
[('apple', 'pear'), ('red', 'green'), ('3 months', '4 months')] 

Для файла вы можете сделать что-то вроде:

with open("file.txt") as f: 
    fruit, colour, expire = zip(*(line.rstrip().split('\\') for line in f)) 

zip возвращает кортежей вместо списков, так что вы можете конвертировать их в списки, используя list().

0
fruit, color, expire = [], [], [] 
for i in open('file.txt'): 
     fr,col,exp = i.split('\\') 
     fruit.append(fr) 
     color.append(col) 
     expire.append(exp) 
print fruit #['apple', 'pear'] 
print color #['red', 'green'] 
print expire #['red', 'green'] 
1

Вы можете использовать последовательность распаковки с помощью метода .split(), а затем добавьте каждое значение их отдельный список. Обратите внимание, что обратные косые черты используются для выхода из специальных последовательностей, поэтому вам нужно избегать обратной косой черты с обратной косой чертой и вместо этого разбивать на '\\'.

>>> line = 'apple\red\3 months' 
>>> line = line.split('\\') 
>>> line 
['apple', 'red', '3 months'] 
>>> fruit, colour, expire = line 
>>> print(fruit, colour, expire) 
apple red 3 months 

При чтении из файлов, которые вы также должны .strip() каждую строку, потому что они имеют символы новой строки в конце. Решение:

data = {'fruits': [], 'colours': [], 'expires': []} 

with open('file.txt') as f: 
    for line in f: 
     fruit, colour, expire = line.strip().split('\\') 
     data['fruits'].append(fruit) 
     data['colours'].append(colour) 
     data['expires'].append(expire) 

Выдвижная версия:

columns = ['fruits', 'colours', 'expires'] 
data = {c: [] for c in columns} 

with open('file.txt') as f: 
    for line in f: 
     line = line.strip().split('\\') 
     for i, c in enumerate(columns): 
      data[c].append(line[i]) 

Непроверено один вкладыш:

with open('file.txt') as f: data = {c: d for c, *d in zip(*(['fruits', 'colours', 'expires']+[line.strip().split('\\') for line in f]))} 
Смежные вопросы