从python中的文本文件返回多行

时间:2017-01-28 09:16:10

标签: python return text-files

我有一个函数,我想读取一个文件并从中返回多个值,虽然我很难理解这是如何工作的。例如,如果我的文本文件如下所示:

John 2543
Jack 2453
Henry 3672
Jane 2405 
Terry 9863

我的代码是这样的:

def function(): 

    file = open('file.txt')    

    for lines in file:
        name, number = lines.split(' ')
        return name

def main():
    print(function())

main()

这只返回一行中的名称,其中我想要整个第一列。我明白,如果我做了一个打印功能,而不是返回一个可以工作的功能。但是,在这种情况下,我想返回值,以便我可以将它们与我的其他函数一起使用。谢谢。

编辑:

我还有一个跟进问题,就是如何在为每列专用功能的同时并排打印两列。通常,当我一个接一个地打印一列时,它将显示为:

John 
Jack 
Henry 
Jane 
Terry 
2543
2453
3672
2405 
9863

当我希望它们显示为:

John 2543
Jack 2453
Henry 3672
Jane 2405 
Terry 9863

2 个答案:

答案 0 :(得分:0)

当你返回一个值时,函数结束并且控制立即返回到调用它的函数。所以当你在循环内部返回时,你不会在函数退出之前多次执行循环并将其返回值交给调用函数。

您需要先构建整个列表,然后返回它。

def function():
    with open('file.txt') as file:
        names = []
        for line in file:
            names.append(line.split()[0])

    return names

def function():
    with open('file.txt') as file:
        return [line.split()[0] for line in file]

并像这样使用它:

def main():
    for name in function():
        print(name)

答案 1 :(得分:0)

这是一个带发电机的解决方案。如果您的文件很大,yield文件的每一行都可以派上用场。这可以防止整个文件被读入内存。

然后在for循环中处理文件的内容。

还要注意with语句以打开文件。这需要关闭它(即使程序崩溃)并且是从文件中读取的pythonic方式。

def function():

    with open('file.txt') as file:

       for line in file:
           name, value = line.split()
           value = int(value)
           yield name, value

# here you can do what you need to for all the data in the file
for name, value in function():
    print(name, value)

我冒昧地将value投射到int。不知道这对你有用......

如果你需要更改行/列,那么你必须阅读所有内存,你可以这样做:

data = [(names, values) for names, values in function()]
names = [item[0] for item in data]
values = [item[1] for item in data]

然后你可以用以下方式打印出来:

separator = '|'
name_lst = ['{:6s}'.format(name) for name in names]
value_lst = ['{:<6d}'.format(value) for value in values]

# join the lists to str
print(separator.join(name_lst))
print(separator.join(value_lst))

# John  |Jack  |Henry |Jane  |Terry 
# 2543  |2453  |3672  |2405  |9863