从多个文件中读取行
Read lines from Multiple files
我有两个文件:
甲:
John
Kevin
Richard
乙:
Manager
Salesperson
Doctor
我正在尝试同时从两个文件中读取行并打印以下内容:
输出:
John is a Manager
Kevin is a Salesperson
Richard is a Doctor
我尝试使用 contextlib.izip 包,但它不起作用。
代码:
with open('name') as names:
with open('job') as jobs:
for names1 in names:
jobs1 = jobs.readlines()
print names1 + jobs1
但这会引发错误
`TypeError: cannot concatenate 'str' and 'list' objects`
我也试过使用 contextlib 包,但没用。
你基本上想要这个:
# These can come from open("file").readlines()
a = ("John", "Kevin", "Richard")
b = ("Manager", "Salesperson", "Doctor")
for person, role in zip(a, b):
print("{} is a {}".format(person, role))
您可以使用 zip 函数和多个上下文管理器来做到这一点:
with open('name') as name_file, open('job') as job_file:
for name_line, job_line in zip(name_file, job_file):
print("{} is a {}".format(
name_line.strip(), job_line)) # don't forget to strip the newline
# from the names
此代码适用于 Python 3。如果您在 Python 2 中工作,请使用 itertools.izip()。
此处发布的其他解决方案利用 readlines()
工作,但它们使用了不必要的内存量。当您一次只关心一对行时,无需读入两个完整的文件,因此我强烈建议改用我在此处描述的迭代器方法。
您可以分别读取这两个文件,然后压缩结果
即
with open('name') as f:
name = f.readlines()
with open('job') as f:
job = f.readlines()
roles = zip(name, job)
或者,您可以使用代码中显示的嵌套循环。问题出在 readlines()
中,它将 return 读取所有行。但是,文件对象是 python 中的生成器,因此您可以简单地对其进行迭代。
with open('name') as names:
with open('job') as jobs:
for n in names:
for j in jobs:
print("{n} is a {j}".format(n=n, j=j))
我更喜欢第一个选项,因为它更具可读性。
我有两个文件:
甲:
John
Kevin
Richard
乙:
Manager
Salesperson
Doctor
我正在尝试同时从两个文件中读取行并打印以下内容:
输出:
John is a Manager
Kevin is a Salesperson
Richard is a Doctor
我尝试使用 contextlib.izip 包,但它不起作用。
代码:
with open('name') as names:
with open('job') as jobs:
for names1 in names:
jobs1 = jobs.readlines()
print names1 + jobs1
但这会引发错误
`TypeError: cannot concatenate 'str' and 'list' objects`
我也试过使用 contextlib 包,但没用。
你基本上想要这个:
# These can come from open("file").readlines()
a = ("John", "Kevin", "Richard")
b = ("Manager", "Salesperson", "Doctor")
for person, role in zip(a, b):
print("{} is a {}".format(person, role))
您可以使用 zip 函数和多个上下文管理器来做到这一点:
with open('name') as name_file, open('job') as job_file:
for name_line, job_line in zip(name_file, job_file):
print("{} is a {}".format(
name_line.strip(), job_line)) # don't forget to strip the newline
# from the names
此代码适用于 Python 3。如果您在 Python 2 中工作,请使用 itertools.izip()。
此处发布的其他解决方案利用 readlines()
工作,但它们使用了不必要的内存量。当您一次只关心一对行时,无需读入两个完整的文件,因此我强烈建议改用我在此处描述的迭代器方法。
您可以分别读取这两个文件,然后压缩结果
即
with open('name') as f:
name = f.readlines()
with open('job') as f:
job = f.readlines()
roles = zip(name, job)
或者,您可以使用代码中显示的嵌套循环。问题出在 readlines()
中,它将 return 读取所有行。但是,文件对象是 python 中的生成器,因此您可以简单地对其进行迭代。
with open('name') as names:
with open('job') as jobs:
for n in names:
for j in jobs:
print("{n} is a {j}".format(n=n, j=j))
我更喜欢第一个选项,因为它更具可读性。