阅读infile的班级

时间:2013-11-13 14:28:27

标签: python list class

我想创建一个导入文本文件中每个单独行的类,如果可能,将元素转换为int,然后将这些对象附加到列表中。

另外,如果文本文件中的行超过6个单词,我想这样做,以便前2个在列表中保存在一起。

例如,我导入了一个文本文件,如:

Hi my age is 15 16
If you want 13 to add
Please use 0 to add to it

制作包含3个单独对象的列表

[
    ['Hi', 'my', 'age' 'is', 15, 16], 
    ['If', 'you', 'want', 13, 'to', 'add'],
    ['Please use', 0, 'to', 'add', 'to', 'it',]
]

对于蟒蛇来说是全新的,我希望得到一些帮助,提前谢谢!

2 个答案:

答案 0 :(得分:2)

这可以使用小循环结构非常简单地完成。我们可以将文件作为循环的一部分打开并逐行读取。假设您有一个文本文件,其中包含您在上面输入的名为'foo.txt'的内容。

myList = []
for line in open('foo.txt'):
    l.append(line.rstrip().split(' ')

这将在您正在寻找的列表结构中创建列表。但等等,我们还没完成! Python将以这种方式读取的值解析为 String 类型。因此,如果读入数字,它们实际上将作为字符串放入列表中,而不是您想要的。要确定它是否为数字,可以在字符串上使用 isdigit()方法。

myList = []
for line in open('foo.txt'):
    temp = line.rstrip().split()
    toAdd = []
    for value in temp:
        if value.isdigit():
            toAdd.append( int(value) )
        else:
            toAdd.append(value)
    myList.append(toAdd)

这绝不是解决这个问题的最佳方法,只是想到的第一个解决方案。可能的情况是整个循环可能会作为某种LC表达式执行,如果有人愿意考虑它。

满足您的最后要求,但我认为这样做并不困难。我鼓励你尝试改进我提供的东西。我强烈建议您查看Python文档中的String和List类中可用的方法(分别为http://docs.python.org/2/library/string.htmlhttp://docs.python.org/2/library/stdtypes.html#typesseq

答案 1 :(得分:0)

raw_data = open('textfile.txt', 'r')

lines = [ele.split() for ele in raw_data]

_list = []
_temp = []

for line in lines:
    for ele in line:
        try:
            _temp.append(int(ele.strip()))
        except:
            _temp.append(ele.strip())


    _list.append(_temp if (len(_temp) <= 6) else ["{0} {1}".format(_temp[0], _temp[1])]+_temp[2:])
    _temp = []

print _list

输出

[['Hi', 'my', 'age', 'is', 15, 16],
 ['If', 'you', 'want', 13, 'to', 'add'],
 ['Please use', 0, 'to', 'add', 'to', 'it']]