linux行计数不使用python代码

时间:2013-01-30 00:14:19

标签: python

我使用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))

提前致谢,

艾哈迈德

4 个答案:

答案 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个新的行字符。

您可以通过在每个文件的末尾添加一个空的新行来使其正常工作。