我目前正在使用Jupyter ipython笔记本,而我正在使用的文件有很多代码。我只是好奇我的文件中有多少行代码。由于我将代码分成许多不同的块,因此很难计算。
对于有jupyter笔记本经验的人,你如何计算文件中有多少行代码?
谢谢!
编辑:虽然以一种相当模糊的方式,但我已经想出了如何做到这一点。下面是这样的:将jupyter笔记本下载为.py文件,然后在Xcode等软件中打开.py文件,或者使用你使用的任何IDE,并计算那里的代码行。
答案 0 :(得分:8)
这将为您提供通过命令行传递给脚本的一个或多个笔记本中LOC的总数:
#!/usr/bin/env python
from json import load
from sys import argv
def loc(nb):
cells = load(open(nb))['cells']
return sum(len(c['source']) for c in cells if c['cell_type'] == 'code')
def run(ipynb_files):
return sum(loc(nb) for nb in ipynb_files)
if __name__ == '__main__':
print(run(argv[1:]))
所以你可以做$ ./loc.py nb1.ipynb nb2.ipynb
之类的事情来获得结果。
答案 1 :(得分:0)
如果您有一个有用的jq实用程序,也可以从shell进行以下操作:
jq '.cells[] | select(.cell_type == "code") .source[]' nb1.ipynb nb2.ipynb | wc -l
此外,您可以使用grep
进一步过滤行,例如删除空白行:
| grep -e ^\"\\\\n\"$ | wc -l
答案 2 :(得分:0)
@Jessime Kirk的回答非常好。但是似乎ipynb文件不应该包含中文字符。因此,我对代码进行了如下优化。
#!/usr/bin/env python
from json import load
from sys import argv
def loc(nb):
with open(nb, encoding='utf-8') as data_file:
cells = load(data_file)['cells']
return sum(len(c['source']) for c in cells if c['cell_type'] == 'code')
def run(ipynb_files):
return sum(loc(nb) for nb in ipynb_files)
if __name__ == '__main__':
print(r"This file can count the code lines number in .ipynb files.")
print(r"usage:python countIpynbLine.py xxx.ipynb")
print(r"example:python countIpynbLine.py .\test_folder\test.ipynb")
print(r"it can also count multiple code.ipynb lines.")
print(r"usage:python countIpynbLine.py code_1.ipynb code_2.ipynb")
print(r"start to count line number")
print(run(argv[1:]))