Python连接多个文件,每个文件中的行数达到一定限制

Python连接多个文件,每个文件中的行数达到一定限制,python,Python,我正在寻找一个代码能够连接不同的.txt文件,但只是在每一个特定的行数 假设我们有许多文本文件,如下所示: file1.txt: AAAAA BBBBB CCCCC DDDDD EEEEE file2.txt: FFFFF GGGGG HHHHH IIIII JJJJJ file3.txt: KKKKK LLLLL MMMMM NNNNN OOOOO file4.txt: PPPPP QQQQQ RRRRR SSSSS TTTTT 我们如何创建一个如下所示

我正在寻找一个代码能够连接不同的.txt文件,但只是在每一个特定的行数

假设我们有许多文本文件,如下所示:

file1.txt:

AAAAA

BBBBB

CCCCC

DDDDD

EEEEE
file2.txt:

FFFFF

GGGGG

HHHHH

IIIII

JJJJJ
file3.txt:

KKKKK

LLLLL

MMMMM

NNNNN

OOOOO
file4.txt:

PPPPP

QQQQQ

RRRRR

SSSSS

TTTTT
我们如何创建一个如下所示的日志文件(假设所有日志文件都必须连接到第3行-包括在内)

结果:

AAAAA

BBBBB

CCCCC

FFFFF

GGGGG

HHHHH

KKKKK

LLLLL

MMMMM

PPPPP

QQQQQ

RRRRR
这是针对Python3.7.3的。我使用以下示例成功地连接了文件:

但我无法修改每个文件的特定最大行数的代码

到目前为止开发的相关代码(但未成功):

有什么帮助吗

获取的错误消息显示:


TypeError:需要类似字节的对象,而不是“int”

是否确实要使用

for **line** in fd:

  for **line** in range (0, 3):
第二行变量覆盖第一行,因此第二行是0..3之间的整数 如果你真的想这么做,就用

a.write(str(line))

您确定要使用吗

for **line** in fd:

  for **line** in range (0, 3):
第二行变量覆盖第一行,因此第二行是0..3之间的整数 如果你真的想这么做,就用

a.write(str(line))

如果我理解正确,请尝试以下方法:

import glob

limit = 3
with open('newfile.log', 'wb') as wfd:
    for f in glob.glob(r'*.txt'):
        with open(f, 'rb') as fd:
            line_count = 0
            for line in fd:
                if line_count >= limit:
                    break
                wfd.write(line)
                line_count += 1

如果我理解正确,请尝试以下方法:

import glob

limit = 3
with open('newfile.log', 'wb') as wfd:
    for f in glob.glob(r'*.txt'):
        with open(f, 'rb') as fd:
            line_count = 0
            for line in fd:
                if line_count >= limit:
                    break
                wfd.write(line)
                line_count += 1

第一个循环中
line
的值是
bytes
,因为
f
是以二进制模式打开的,它被第二个循环覆盖,并成为
int
,这不是
write()
所期望的。 您可以使用
writelines()
来编写一个行列表,您可以使用
readlines()
来获取这些行,当然您可以使用
readlines()
上的切片来仅获取前3行:

导入全局
打开(“newfile.log”、“wb”)作为日志:
对于glob.glob(“*.txt”)中的f:
以开放式(f,“rb”)作为fd:
log.writelines(fd.readlines()[:3])

第一个循环中
的值,即
字节
,因为
f
是以二进制模式打开的,被第二个循环覆盖,并成为
int
,这不是
write()
所期望的。 您可以使用
writelines()
来编写一个行列表,您可以使用
readlines()
来获取这些行,当然您可以使用
readlines()
上的切片来仅获取前3行:

导入全局
打开(“newfile.log”、“wb”)作为日志:
对于glob.glob(“*.txt”)中的f:
以开放式(f,“rb”)作为fd:
log.writelines(fd.readlines()[:3])

如果可以通过调用
range()
来描述所需的行号,则可以使用更直接的方法:

from itertools import islice

max_lines = 3

with open('newfile.log', 'wb') as wfd:
    for f in glob.glob(r'*.txt'):
        with open(f, 'rb') as fd:
            wfd.writelines(islice(fd, max_lines))

如果可以通过调用
range()
来描述所需的行号,则可以使用更直接的方法:

from itertools import islice

max_lines = 3

with open('newfile.log', 'wb') as wfd:
    for f in glob.glob(r'*.txt'):
        with open(f, 'rb') as fd:
            wfd.writelines(islice(fd, max_lines))

您不想使用
wfd.write()
而不是
a.write()
?您不想使用
wfd.write()
而不是
a.write()
来进行行计数,枚举(fd)中的行:
以避免在堆栈溢出时手动跟踪
行计数
@AndrésF,通常的做法是。向上投票和绿色复选标记向其他人指示哪些答案解决了您的问题。请参阅
了解枚举(fd)中的行数:
为避免在堆栈溢出处手动跟踪
行数
@AndrésF,如果答案对您有帮助,通常的做法是。向上投票和绿色复选标记向其他人指示哪些答案解决了您的问题。看见