Python 从文件行分组成对的文件中获取输入
所以我必须读一个文件,每次我读这个文件时,我必须把行成对地存储在变量中,并用输入数据做各种事情 我的问题是,我如何将这些行成对地“分组”,以便,例如,如果我在第一行选择三个最喜欢的数字,在第二行选择他们的名字和姓氏,那么整个文件都会这样做?为了简单起见,我将其设置为只打印出我试图存储的内容Python 从文件行分组成对的文件中获取输入,python,file-io,Python,File Io,所以我必须读一个文件,每次我读这个文件时,我必须把行成对地存储在变量中,并用输入数据做各种事情 我的问题是,我如何将这些行成对地“分组”,以便,例如,如果我在第一行选择三个最喜欢的数字,在第二行选择他们的名字和姓氏,那么整个文件都会这样做?为了简单起见,我将其设置为只打印出我试图存储的内容 array = [] userInput = sys.stdin array.append(userInput.readline().strip()) firstName,lastName = map(str
array = []
userInput = sys.stdin
array.append(userInput.readline().strip())
firstName,lastName = map(str,userInput.readline().split(" "))
print(firstName)
print(lastName)
print(array)
输入的一个例子是:
1 2 3
John Doe
4 5 6
Queen Mary
John
Doe
['1 2 3']
Queen
Mary
['4 5 6']
文本文件中的输出示例如下:
1 2 3
John Doe
4 5 6
Queen Mary
John
Doe
['1 2 3']
Queen
Mary
['4 5 6']
您可以在循环中两次
readline
,并将它们都附加到数据结构中,等等:
伪码
您可能需要处理异常
读取后,您可以按自己喜欢的方式处理每组两行数据。高效内存解决方案 使用一个切换标志,您可以每隔一行切换一次,并将内容打印到输出文件(因此,您的内存一次只能保存mximum的内容2行):
行
已经是第一行;您只需调用一次f.readline()
(很抱歉,我意识到我的第一条评论不太准确)。请参阅中的grouper
配方。
from itertools import zip_longest
def read_lines_in_batches(file_path, n = 1):
with open(file_path) as fh:
fhs = [fh] * n
for batch in zip_longest(*fhs):
yield [line for line in batch if line]
for lines in read_lines_in_batches('foo/bar.txt', 3):
print(lines)