我正在寻找一种能够连接不同.txt文件但每个文件最多只能包含一定数量行的代码。
假设我们有许多文本文件,如下所示:
file1.txt:
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Style.Triggers>
<DataTrigger Binding="{Binding IsVisible}" Value="False">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
</ItemsControl.ItemContainerStyle>
file2.txt:
AAAAA
BBBBB
CCCCC
DDDDD
EEEEE
file3.txt:
FFFFF
GGGGG
HHHHH
IIIII
JJJJJ
file4.txt:
KKKKK
LLLLL
MMMMM
NNNNN
OOOOO
我们如何制作一个如下所示的日志文件(假设所有日志文件最多只能串联到包括在内的行号3)?
结果:
PPPPP
QQQQQ
RRRRR
SSSSS
TTTTT
这是针对Python 3.7.3的。我使用以下示例提供了成功的连接文件:
但是我无法为每个文件指定最大行数来修改代码。
迄今已开发了相关代码(但未成功完成):
AAAAA
BBBBB
CCCCC
FFFFF
GGGGG
HHHHH
KKKKK
LLLLL
MMMMM
PPPPP
QQQQQ
RRRRR
有帮助吗?
获得的错误消息显示:
TypeError:需要一个类似字节的对象,而不是'int'
答案 0 :(得分:0)
确定要使用
for **line** in fd:
for **line** in range (0, 3):
第二个行变量将覆盖第一个,因此line是从0..3开始的整数 如果您确实想这样做,请使用
a.write(str(line))
答案 1 :(得分:0)
如果我对您的理解正确,请尝试以下操作:
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
答案 2 :(得分:0)
第一个循环中的line
的值是bytes
,因为f
以二进制模式打开,被第二个循环覆盖并变成了int
不是write()
所期望的。
您可以使用writelines()
来编写可以使用readlines()
获得的行的列表,当然您可以在readlines()
上使用切片来仅获得前三行:
import glob
with open("newfile.log", "wb") as log:
for f in glob.glob("*.txt"):
with open(f, "rb") as fd:
log.writelines(fd.readlines()[:3])
答案 3 :(得分:0)
如果可以通过调用range()
来描述所需的行号,则可以使用itertools.islice
作为更直接的方法:
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))