Как прочитать текстовый файл в отдельные списки python - PullRequest
3 голосов
/ 21 января 2012

Скажем, у меня есть текстовый файл, отформатированный так:

100 20 птицы летят

и я хотел прочитать int (s) в их собственных списках, а строку - в своем собственном списке ... как бы я поступил в Python. Я пытался

data.append(map(int, line.split()))

это не сработало ... любая помощь?

Ответы [ 4 ]

4 голосов
/ 21 января 2012

По сути, я читаю файл построчно и разделяю их.Сначала я проверяю, могу ли я превратить их в целое число, и если мне это не удается, трактуйте их как строки.

def separate(filename):
    all_integers = []
    all_strings = []
    with open(filename) as myfile:
        for line in myfile:
            for item in line.split(' '):
                try:
                    # Try converting the item to an integer
                    value = int(item, 10)
                    all_integers.append(value)
                except ValueError:
                    # if it fails, it's a string.
                    all_strings.append(item)
    return all_integers, all_strings

Затем, учитывая файл ('mytext.txt')

100 20 the birds are flying
200 3 banana
hello 4

... выполнение следующих действий в командной строке возвращает ...

>>> myints, mystrings = separate(r'myfile.txt')
>>> print myints
[100, 20, 200, 3, 4]
>>> print mystrings
['the', 'birds', 'are', 'flying', 'banana', 'hello']
3 голосов
/ 21 января 2012

Если я правильно понимаю ваш вопрос:

import re

def splitList(list):
    ints = []
    words = []
    for item in list:
        if re.match('^\d+$', item):
           ints.append(int(item))
        else:
           words.append(item)
    return ints, words

intList, wordList = splitList(line.split())

Даст вам два списка: [100, 20] и ['the', 'birds', 'are', 'flying']

2 голосов
/ 21 января 2012

Вот простое решение.Обратите внимание, что он может быть не таким эффективным, как другие, для очень больших файлов, потому что он повторяет более word два раза для каждого line.

words = line.split()
intList = [int(x) for x in words if x.isdigit()]
strList = [x for x in words if not x.isdigit()]
0 голосов
/ 21 января 2012

pop удаляет элемент из списка и возвращает его:

words = line.split()
first = int(words.pop(0))
second = int(words.pop(0))

Это, конечно, при условии, что ваш формат всегда int int word word word ....

А затем присоединитесь к остальной части строки:

words = ' '.join(words)

А в Python 3 вы даже можете сделать это:

first, second, *words = line.split()

Что довольно мило. Хотя вам все равно придется конвертировать first и second в int.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...