我使用WC -l来计算文本文档中的行数。但是我在这里遇到了问题。
我有一个python代码,它将不同的数字组合写入不同的文件。每个文件在单独的行中包含组合的每个编号。
当我使用wc -l时,它没有计算最后一行!
下面是python代码:
import os
import itertools
lst = [6,7,8,9,12,19,20,21,23,24,26,27,28,29,43,44]
combs = []
for i in xrange(1, len(lst)+1):
els = [list(x) for x in itertools.combinations(lst, i)]
combs.extend(els)
for combination in els:
combination_as_strings = map(str, combination)
filename = "_".join(combination_as_strings) + ".txt"
filename = os.path.join("Features", filename)
with open(filename, 'w') as output_file:
output_file.write("\n".join(combination_as_strings))
提前致谢,
艾哈迈德
答案 0 :(得分:4)
您使用的join
是在行之间放置换行符,但不是在最后一行的末尾。因此,wc
不计算最后一行(它计算换行数)。
在脚本末尾的output_file.write("\n")
子句中添加with
:
with open(filename, 'w') as output_file:
output_file.write("\n".join(combination_as_strings))
output_file.write("\n")
答案 1 :(得分:2)
我认为您正在看到这种变体:
$ printf '1\n2\n3' | wc -l
在Bash提示下输入此内容 - 打印2
,因为没有最终\n
比较:
$ printf '1\n2\n3\n' | wc -l
由于最终\n
而打印3。
Python文件方法不会在其输出中附加\n
。要修复代码,请使用writelines,如下所示:
with open(filename, 'w') as output_file:
output_file.writelines(["\n".join(combination_as_strings),'\n'])
或打印到文件:
with open(filename, 'w') as output_file:
print >>output_file, "\n".join(combination_as_strings)
或使用格式模板:
with open(filename, 'w') as output_file:
output_file.write("%s\n" % '\n'.join(combination_as_strings))
答案 2 :(得分:1)
为什么不使用writelines
?
output_file.writelines(line+"\n" for line in combination_as_strings)
答案 3 :(得分:1)
wc
命令计算文件中新换行符的数量(\n
)。
因此,如果一个文件中有10行,它将返回9,因为你将有9个新的行字符。
您可以通过在每个文件的末尾添加一个空的新行来使其正常工作。