如何将文本文件读入单独的列表python中

时间:2012-01-21 02:31:37

标签: python file-io

假设我有一个格式如下的文本文件:

100 20只鸟在飞行

我想将int(s)读入自己的列表,将字符串读入自己的列表......我将如何在python中进行此操作。我试过了

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

没有用......有什么帮助吗?

4 个答案:

答案 0 :(得分:4)

基本上,我正在逐行读取文件,并将它们分开。我首先检查一下我是否可以把它们变成一个整数,如果我失败了,就把它们视为字符串。

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']

答案 1 :(得分:3)

如果我理解你的问题:

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 :(得分:2)

这是一个简单的解决方案。请注意,对于非常大的文件,它可能不如其他文件有效,因为它为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()]

答案 3 :(得分:0)

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()

哪个很整洁。虽然您仍需将firstsecond转换为int