Jupyter Notebook单元格输出按换行保存数字的实现问题
解决方法:让每个数字单独占一行保存
这里有两个简单有效的方法来解决你的问题:
方法1:修改捕获输出的方式(从源头调整)
你之前用print(q)会直接输出列表的默认格式(逗号分隔),所以捕获到的内容自然也是逗号分隔的。我们可以改成逐个打印每个数字,这样捕获的stdout就是每行一个数字:
第一个单元格修改为:
%%capture cap --no-stderr for num in q: print(num)
第二个单元格保持原来的写入逻辑即可:
with open('output.txt', 'w') as f: f.write(cap.stdout)
方法2:直接处理列表写入文件(更高效,无需依赖capture)
其实你完全可以跳过%%capture的步骤,直接把列表q里的元素按每行一个的格式写入文件,这样更直观也更高效:
替换原来的两个单元格,直接用这段代码:
#%% np.seterr(over='ignore') a = np.uint32(1664525) c = np.uint32(1013904223) seed = np.uint32(1) rng = LCG(seed, a, c) q = [rng.next() for _ in range(0, 2500000)] # 直接写入文件 with open('output.txt', 'w') as f: f.write('\n'.join(map(str, q)))
为什么你之前的尝试没生效?
你之前用with open('output.txt', 'a') as f: f.write("\n")只是在文件末尾追加了一个换行,并没有改变原来已经写入的逗号分隔内容。问题的根源是print(q)输出的就是列表的默认字符串格式,所以捕获到的内容本身就是逗号分隔的,后续追加换行无法改变这一点。
内容的提问来源于stack exchange,提问作者tbone
相关产品推荐
相关产品推荐

