Python连接多个文件,每个文件中的行数达到一定限制
我正在寻找一个代码能够连接不同的.txt文件,但只是在每一个特定的行数 假设我们有许多文本文件,如下所示: file1.txt: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 我们如何创建一个如下所示
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,如果答案对您有帮助,通常的做法是。向上投票和绿色复选标记向其他人指示哪些答案解决了您的问题。看见