gpt4 book ai didi

PYTHON:交替读取 2 个文件中的行并 append 到第三个文件

转载 作者:太空宇宙 更新时间:2023-11-04 06:15:38 27 4
gpt4 key购买 nike

我需要编写一个函数 shuffleFiles(afile, bfile, cfile),它从文件 afile 中读取一行,然后从文件 bfile 中读取一行,并将这些行分别 append 到文件 C。如果文件 afile 或 bfile 已经被完全读取然后继续将其他文件中的行 append 到文件 C。

这是我到目前为止的代码,这些行没有被写入文件,但是如果我将它们换成打印语句,这些行将以正确的顺序打印出来,只是在大多数行之间有空白\n .不知道从这里去哪里

def shuffleFiles(afile, bfile, cfile):
fileA = open(afile, 'r')
fileB = open(bfile, 'r')
fileC = open(cfile, 'a')
fileADone = False
fileBDone = False
while not fileADone or not fileBDone:
if not fileADone:
line = fileA.readline()
line.rstrip()
line.strip()
if line == "" or line == " " or line == "/n":
fileADone = True
else:
fileC.write(str(line))
if not fileBDone:
line = fileB.readline()
line.rstrip()
line.strip()
if line == "" or line == " " or line == "/n":
fileBDOne = True
else:
fileC.write(str(line))

fileA.close()
fileB.close()
fileC.close()

最佳答案

这是迭代两个交替可迭代对象(包括文件)的一种方法:

from itertools import chain, izip_longest

fileA = open('file_A.txt')
fileB = open('file_B.txt')

for line in filter(None, chain.from_iterable(izip_longest(fileA, fileB))):
#Do stuff here.

izip_longest 将两个或多个可迭代对象“压缩”在一起:

>>> a = [1, 2, 3, 4]
>>> b = ['a', 'b', 'c', 'd', 'e', 'f']
>>> list(izip_longest(a, b))
[(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd'), (None, 'e'), (None, 'f')]

然后 chain.from_iterable 将它们链接成一个长期运行的可迭代对象:

>>> list(chain.from_iterable(izip_longest(a, b)))
[1, 'a', 2, 'b', 3, 'c', 4, 'd', None, 'e', None, 'f']

最后,以 None 作为第一个参数的 filter 只返回非假值的值。在这种情况下,它用于过滤掉上面列表中的 None(Nones 将在一个 iterable 比另一个长时发生),以及过滤掉 '' 文件中可能存在的空字符串。

>>> filter(None, chain.from_iterable(izip_longest(a, b)))
[1, 'a', 2, 'b', 3, 'c', 4, 'd', 'e', 'f']

编辑 - 感谢 Tadeck

将所有这些放在一起,以及用于打开文件的更多 pythonic with 运算符,我们得到如下内容:

with open('fileA.txt') as fileA, open('fileB.txt') as fileB, open('fileC.txt') as fileC:
lines = chain.from_iterable(izip_longest(fileA, fileB, fillvalue=''))
fileC.writelines(filter(None, (line.strip() for line in lines)))

关于PYTHON:交替读取 2 个文件中的行并 append 到第三个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15869388/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com